我正在使用Split View Controller。对于master,我将带有Table View Controller的导航控制器作为根视图。有关详细信息,我将导航控制器与自定义视图控制器作为根视图。从master我选择tableView行并在详细信息视图中显示行详细信息。从详细信息视图,我可以使用另一个带模态segue的View Controller编辑此行的详细信息。问题是:在保存详细信息编辑视图(模态)中的更改后,如何刷新tableView(主)。当我点击保存按钮时,会触发-(IBAction) unwindEditRow:(UIStoryboardSegue *)segue
(详细信息)。
答案 0 :(得分:2)
当特定事件发生时,您有很多方法可以向ViewController发送消息。
第一种方法:使用委托模式。什么是代表? 委托是一种简洁的连接对象并帮助他们与其他人交流的方式。换句话说,委托是Objective-C对象的约会服务。 :)有一些有用的链接:Basic concepts in Objective-C,Writing 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一起使用的主要方法是任何对象都可以向通知中心发送通知,同时任何其他对象都可以侦听该中心的通知。