#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 = ...;
}
}