Передача информации в viewcontroller на раскадровке

#ios #xcode #uiviewcontroller #uinavigationcontroller #storyboard

#iOS #xcode #uiviewcontroller #uinavigationcontroller #раскадровка

Вопрос:

Я новичок в использовании раскадровок, и я сталкиваюсь с такой ситуацией: uinavigationcontroller содержит контроллер представления (корневой контроллер), который содержит десять кнопок, каждая из которых связана через раскадровку с тем же контроллером представления.

Поведение второго контроллера представления зависит от нажатия кнопки в первом контроллере представления, но как определить, какая кнопка нажата (например, значение тега), и передать эту информацию второму контроллеру представления?

Спасибо.

Ответ №1:

Чтобы добавить ответ Даниэля:

Во-первых, добавьте общедоступное свойство на ваш secondVC, доступное из вашего первого VC:

 @interface SecondViewController : UIViewController 

@property (nonatomic) int buttonTagClicked;

@end
  

Вам необходимо настроить теги на ваших UIButtons. Это делается либо в раскадровке, либо программно в вашем коде. Я бы создал общий IBAction , с которым связана каждая кнопка. Вы можете извлечь тег с кнопки через параметр sender позже.

 - (IBAction)buttonClicked:(id)sender
{
  [self performSegueWithIdentifier:@"pushSegue" sender:sender];
}
  

Это связано с

 - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
  if ([segue.identifier isEqualToString:@"pushSegue"]) {
    SecondViewController *destinationVC = (SecondViewController *)[segue destinationViewController];
    UIButton *selectedButton = (UIButton *)sender;
    destinationVC.buttonTagClicked = selectedButton.tag;
  }
}
  

Ответ №2:

Вы можете установить a segueIdentifier для каждого соединения. Затем в вашем ViewController вы можете запустить действие на основе установленного вами идентификатора.

например:

Если вы выберете свое соединение в раскадровке, вы можете назвать его:

введите описание изображения здесь

И в вашем ViewController вы можете запустить действие на основе идентификатора, подобного этому:

 - (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"segue1"]) {
        UIViewController *destinationVC = [segue destinationViewController];
        destinationVC.property = ...;
    }
}