两个未直接连接的ViewControllers之间的通信

时间:2017-01-30 13:29:51

标签: ios objective-c uiviewcontroller delegation

我想让ViewController F与ViewController C通信。 它们的安排如下: 导航控制器A嵌入ViewController B,它在容器视图中显示ViewController C. 从ViewController B到NavigationController D有一个segue,它嵌入了ViewController E和ViewController F(在E和F之间的segue)。

我目前正在使用的工作解决方案如下:在必要的ViewControllers之间建立一个委托“路径”:ViewController F委托给ViewController E,它委托给ViewController B,最终将信息委托给ViewController C. 感觉必须有一个更简单的方法来做到这一点。 你能推荐一个吗?也许将ViewController C里面的“segue路径”交给ViewController F来设置C和F之间的直接委托?

谢谢!

1 个答案:

答案 0 :(得分:2)

我会使用NSNotification

在ViewController F中:

- (void)sendData {
    // Fire the notification
    [[NSNotificationCenter defaultCenter] postNotificationName:@"ReceivedData" 
                                                        object:nil];   
}

在ViewController C中:

- (void)viewDidLoad {
    [NSNotificationCenter defaultCenter] addObserver:self 
                                            selector:@selector(receivedDataNotification:) 
                                                name:@"ReceivedData" 
                                              object:nil];
}

- (void)receivedDataNotification:(id)object {
    NSLog(@"Received Data!");
}