保持MasterViewController和DetailViewController同步

时间:2012-02-16 18:06:34

标签: ios5 uisplitviewcontroller

我正在使用Xcode 4和iOS5编写一个简单的iPad应用程序。

我正在使用UISplitViewController来管理主视图和详细视图。从主人到细节,一切都很好。我可以从列表中选择一个项目,并通过委托更新详细信息视图。

我希望能够使用详细视图上的按钮删除项目。这在细节视图上非常简单。但是,我似乎无法弄清楚如何更改主视图以反映项目已被删除的事实。

基本上,委托模式似乎只有一种方式;从主人到细节,而不是从细节到掌握。有没有办法将消息从细节传递给主人?

1 个答案:

答案 0 :(得分:1)

您可以使用NSNotifications进行此操作。

#define ReloadMasterTableNotification @"ReloadMasterTableNotification"

在MasterViewController的viewDidLoad中:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadMasterTable:) name:ReloadMasterTableNotification object:_detailViewController];
如果你正在使用ARC,那么

在MasterViewController的dealloc中:

[[NSNotificationCenter defaultCenter] removeObserver:self name:ReloadMasterTableNotification object:nil];

如果要在detailViewController中进行更新以通知MasterViewController:

- (IBAction)onButtonPress {
        NSIndexPath *path = [NSIndexPath indexPathForRow:indexToUpdate inSection:0];
        NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:path, @"IndexPath", nil];
        [[NSNotificationCenter defaultCenter] postNotificationName:ReloadMasterTableNotification object:self userInfo:dict];
}

- (void)reloadMasterTable:(NSNotification *)notification {
    NSDictionary *dict = [notification userInfo];
    NSIndexPath *path = [dict objectForKey:@"IndexPath"];
    // update MasterViewController here
}

希望有所帮助!