如果controllerA 需要 push 到 controllerB, 他们之间的传值有两种情况:
1. 如果使用了sb拖动segue线, 那么在controllerA 中手动实现
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender方法, 参数segue的destination便是controllerB, 在该方法中将需要传递给controllerB的信息传递给事先在controllerB的头文件中定义的属性即可. 在controllerB想要pop的时候, 如果想要传值给controllerA,那么此时有两种方法,
可以在控制器a中定义一个block, 在控制器b中的viewWillDisappear方法中插入以上代码即可实现传值, 另一种方法是手动修改navigationItem的返回按钮, 自定义返回按钮和按钮的action, 在自定义的action中插入以上代码也可以实现传值. 但是给NavigationBar自定义按钮的时候有一个坑, 如果在controllerB中写
改代码是一点效果都没有的, 猜测因为可能是navigationcontroller的navigationItem是统一的, 某个单独的控制器想要修改navigationbar上面的item的话只能修改自己单独的类型, 所以正确的姿势应该是这样
这样就成功覆盖了系统本来的back按钮, 并且会调用我们自定义的方法.
2 如果控制器之间的跳转是靠我们纯代码创建的, 那么无论在控制器里面写多少次prepareForSegue方法都是没办法调用的, 这个时候两个控制器之间的传值就需要我们手动实现一些 代理 或者 block 或者 通知来实现传值机制. 注意 , 一般来说 由controllerA跳转到controllerB中几乎都不需要我们手动实现什么代理之类的东西, 一般在push到controllerB之前把A想要告诉B的值传递给他就好了 , 但是如果由B返回到A, 如果B想要告诉A一些东西, 或者想要A根据B界面操作得到的结果来修改A 界面上的一些数据的话 就需要使用此方法. (其实 如果硬在controllerA的头文件中定义属性来接受b的数据的话 应该也是没问题的 )