鉴于许多视图控制器可能对此事件感兴趣,这听起来像是使用 NSNotifications 提供的发布/订阅模型的不错选择。
要发布通知:
[[NSNotificationCenter defaultCenter] postNotificationName:@"MyEventName" object:optionalPayload];
订阅通知:
- (void)viewWillAppear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:)
name:@"MyEventName" object:nil];
}
- (void)dealloc
{
//Unsubscribe yourself in dealloc
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
-(void)handleNotification:(NSNotification *)pNotification
{
NSLog(@"#1 received message = %@",(NSString*)[pNotification object]);
//Perform your segue here
}
替代方案:自定义根 VC
如果您已创建自己的特定于域的容器视图控制器作为根视图控制器,则可以执行以下操作:
- 将事件发送到根视图控制器。
- 根视图控制器将询问其当前的子/子是否对事件感兴趣(可能通过标记协议),并传播它。
我几乎总是在我的应用程序中使用自定义容器 - RootViewController,因为它可以生成清晰易读的代码,准确描述正在发生的事情。不仅如此,它还使得从这里实现核心布局的东西(例如滑动菜单等)变得非常简单。