拆分视图控制器更新表视图

时间:2013-11-20 20:04:08

标签: ios objective-c uitableview uiviewcontroller uisplitviewcontroller

我正在使用Split View Controller。对于master,我将带有Table View Controller的导航控制器作为根视图。有关详细信息,我将导航控制器与自定义视图控制器作为根视图。从master我选择tableView行并在详细信息视图中显示行详细信息。从详细信息视图,我可以使用另一个带模态segue的View Controller编辑此行的详细信息。问题是:在保存详细信息编辑视图(模态)中的更改后,如何刷新tableView(主)。当我点击保存按钮时,会触发-(IBAction) unwindEditRow:(UIStoryboardSegue *)segue(详细信息)。

1 个答案:

答案 0 :(得分:2)

当特定事件发生时,您有很多方法可以向ViewController发送消息。

第一种方法:使用委托模式。什么是代表? 委托是一种简洁的连接对象并帮助他们与其他人交流的方式。换句话说,委托是Objective-C对象的约会服务。 :)有一些有用的链接:Basic concepts in Objective-CWriting your own custom delegate 以下是声明新协议的方法:

@protocol DetailViewControllerDelegate <NSObject>

-(void)itemHasBeenChanged:(id)edittedObject;

@end

在您的DetailViewController中声明您的未来委托:

@property (weak,nonatomic) MasterViewController <DetailViewControllerDelegate> *delegate;

在MasterViewController.m中实现itemHasBeenChanged:方法:

  -(void)itemHasBeenChanged:(id)edittedObject{
    //editting logic goes here
  }

告诉我们的类实现DetailViewControllerDelegate协议,以便它知道哪些函数可用于它:

@interface MasterViewController : UITableViewController <DetailViewControllerDelegate>

完成所有这些步骤后,您可以随时在DetailViewController中调用方法:

[self.delegate itemHasBeenChanged:yourObject];

Here is my example code on github

第二种方式

我们可以将 NSNotificationCenter 用作自定义协议的替代。在一个大项目中很难做出自定义协议和注册方法,NSNotificationCenter可以让我们摆脱这种负担。与NSNotificationCenter一起使用的主要方法是任何对象都可以向通知中心发送通知,同时任何其他对象都可以侦听该中心的通知。