Вы можете указать контроллеру вида назначения свойство, которое идентифицирует segue, и установить это свойство в методе prepareForSegue:sender:
контроллера представления источника. Пример:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
DestinationViewController *dvc = segue.destinationViewController;
dvc.segueIdentifier = segue.identifier;
if ([segue.identifier isEqualToString:@"Button 1"]) {
[dvc setBudgetOrderingViewController:self];
} else if ([segue.identifier isEqualToString:@"Button 2"]) {
[dvc setBudgetOrderingViewController:self];
} else if ([segue.identifier isEqualToString:@"Button 3"]) {
[dvc setBudgetOrderingViewController:self];
}
}
Однако на самом деле это не очень хороший дизайн. Теперь у вас есть два контроллера представления, которые должны знать все идентификаторы segue. Вы можете забыть обновить один из них, если вы измените идентификатор или добавите новый.
Лучшая конструкция заключается в том, чтобы заставить контроллер представления источника сообщать контроллеру вида назначения, что делать.
Давайте использовать конкретный пример. Предположим, ваше приложение позволяет пользователю отправлять карту другу, когда у друга есть ребенок. Поэтому на главном экране есть три кнопки: «Это мальчик!», «Это девушка!» И «Это щенок!» Когда пользователь нажимает любую из этих кнопок, вы хотите перейти на экран, где пользователь может ввести в сообщении. Вы хотите, чтобы экран ввода сообщений был настроен с темой, на основе которой была нажата кнопка: розовые сердца для девочек, синие грузовики для мальчиков и собачий домик для щенков.
Дайте ваш взгляд назначения контроллера сообщения для каждого из этих возможностей:
@interface MessageComposerViewController : UIViewController
@property (nonatomic, weak) id<MessageComposerViewControllerDelegate> delegate;
- (void)useGirlTheme;
- (void)useBoyTheme;
- (void)usePuppyTheme;
@end
Затем в вашем главном контроллере вида экрана prepareForSegue:sender:
, вы проверить идентификатор и отправить соответствующее сообщение на контроллер вида назначения:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
MessageComposerViewController *dvc = segue.destinationViewController;
dvc.delegate = self;
if ([segue.identifier isEqualToString:@"Girl"]) {
[dvc useGirlTheme];
}
else if ([segue.identifier isEqualToString:@"Boy"]) {
[dvc useBoyTheme];
}
else if ([segue.identifier isEqualToString:@"Puppy"]) {
[dvc usePuppyTheme];
}
}
Объявите объект в контроллере своего назначения и установите его в методе prepareForSegue выше. Затем вы можете определить segue на основе этого свойства. –