当用户点击后退按钮时,我无法将数据从childView传递到navigationController中的parentView。
我尝试使用viewWillDisappear并且没有被调用。
任何想法?
答案 0 :(得分:4)
这样做有两种基本技巧:
使用代理
为您的孩子定义一个简单的委托协议。例如,如果您的孩子习惯从一系列事物中挑选一些字符串,那么请执行以下操作:
@protocol ChildViewControllerDelegate <NSObject>
-(void) childView: (ChildView*) didPickNameFromList: (NSString*) name;
@end
您的父母只会实现此委托协议,并且会在客户端进行选择时进行更新。
这是一种非常标准的技术,许多iOS附带的视图控制器也使用这种技术。例如,请查看ABPeoplePickerNavigationControllerDelegate
。
使用共享(容器)对象
您可以使用的另一种技术是使用子视图控制器可以更改值的共享对象。父视图控制器创建了此对象并保留对它的引用。当它显示子视图控制器时,它会将对共享对象的引用传递给它,以便子进程可以在其上设置值。然后,当父级再次出现时,它可以根据该共享对象的值更新其状态。
我个人更喜欢技术#1。
答案 1 :(得分:0)
实际上我做了不同的事情。
我在子控制器中声明了一个带有parentController类型的变量。
在推送childController之前,在parentController中,我这样做: objView.parentController = self;
然后我只是调用parentController.variableIwant = something;关于儿童控制器和Voile!