您可以给目标视图控制器一个标识转场的属性,并在源视图控制器的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];
}
}