通知父视图某些内容已更改

时间:2010-02-22 16:08:51

标签: iphone objective-c

我有一个核心数据iPhone应用程序。

我在导航控制器上有两个视图(视图A = root,视图B =子)。

我想告诉视图A在视图B弹出导航控制器时(即当用户按下“后退”按钮时)更新它的tableView。发生这种情况时会调用什么方法?我是否需要设置某种协议或通知?

谢谢,

2 个答案:

答案 0 :(得分:0)

我这样做的一种方法是在父级中创建一个BOOL(类似于didPushChildController),当你按下子级时,该BOOL设置为true。然后,在父视图的viewWillAppear中,您可以测试该变量是否已设置并执行您想要执行的操作。

根据控制器堆栈的复杂程度,委托也可能是合适的

答案 1 :(得分:0)

您可以实现视图控制器B的viewWillDisappear方法。

最好的方法是在视图控制器B中声明一个“viewBDelegate” - 协议,它将由视图A实现。

@protocol viewBDelegate <NSObject>
@required
-(void) viewBWillBeClosed;
@end

然后你需要一个视图控制器B中的实例变量,它持有对视图控制器A的引用(在按下视图B时设置)。

@property (nonatomic, retain) id<viewBDelegate> delegate;

在视图控制器B的viewWillDisappear方法中,您可以通过调用委托协议的方法来通知委托(视图控制器A)。

- (void)viewWillDisappear:(BOOL)animated{
    [delegate viewBWillBeClosed];
    [super viewWillDisappear:animated];
}