как передать строку из UIButton с помощью prepareForSegue


Я посылаю строку из UIButton в мой следующий UITtableviewcontroller, строка является заголовком UIButton (понедельник ... Sunday) строка используется NSPredicate для фильтрации информации моей таблицы по дням.

@property (nonatomic, weak) NSString *dayOTW;

- (IBAction)selectDay:(UIButton *)sender {
UIButton *dayW = sender;
dayOTW = dayW.titleLabel.text;
NSLog(@"button press = %@", dayOTW);
}

2012-05-01 06:23:21.731 passingdata[99957:fb03] button press = Monday

И перейти к следующему экрану

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Make sure your segue name in storyboard is the same as this line
if ([[segue identifier] isEqualToString:@"SendWeekDay"])
{
    // Get reference to the destination view controller
    ViewController *vc = [segue destinationViewController];

    // Pass any objects to the view controller here, like...
    vc.dayOTW = dayOTW;
   }
}

В первый раз, когда я выбираю кнопку, информация не отображается в моей таблице, если я вернусь и снова выберу кнопку, моя таблица покажет правильную информацию за этот день .

Что я делаю неправильно ?

Еще один вопрос, связанный с вышеизложенным . У меня есть 7 UIButtons по одному на каждый день в неделю, как можно сегментировать из всех UIButtons с одним сегментом ?

Спасибо

1 2

1 ответ:

Сегмент вызывается перед вашим методом IBAction, поэтому переменная не устанавливается при первом щелчке.

Если сегмент подключен к вашей кнопке, то это будет sender в prepareForSegue, поэтому вам действительно не нужен метод действия. Просто получите название в prepareForSegue:

UIButton *dayButton = (UIButton*)sender
vc.dayOTW = sender.titleLabel.text;

Чтобы подключить один и тот же сегмент ко всем кнопкам, вы должны нажать ctrl-drag от каждой кнопки, но дать всем сегментам один и тот же идентификатор. Это выглядит грязно на раскадровке, поэтому альтернативой является чтобы создать один сегмент непосредственно из контроллера исходного вида, и в методе действия (который вам понадобится в этом случае и будет подключен ко всем вашим кнопкам) вызовите performSegueWithIdentifier:sender::

-(IBAction)dayButtonPressed:(UIButton*)sender
{
    [self performSegueWithIdentifier:@"SendWeekDay" sender:sender];    
}

Затем эта кнопка будет передана методу performSegue в качестве отправителя, поэтому вы можете использовать код, описанный выше.