我的应用有一个标签视图控制器作为主要访问点。 但是,当它第一次运行时,我需要检查一些基本数据,如果缺少,我需要先显示一个视图来捕获这些信息。选项卡视图中的表使用此信息显示数据。
我这样做的方式是这样的: 在我的app-delegate中,我显示了标签视图。 然后检查信息x。如果不存在,请添加子视图2并将其显示在顶部。 在view2中,我捕获信息,然后单击按钮将其从superview中删除。所需数据存储在模型中的全局变量中。 现在,控件返回到显示它的选项卡视图。 问题是我需要在选项卡视图中重新加载表数据,以便它反映正确的信息。但是,我无法在父标签视图中捕获此内容。因此,我可以刷新的唯一方法是手动点击按钮,这是不理想的。我希望它在从堆栈中删除子视图后立即自动刷新。
答案 0 :(得分:6)
注册和调用通知是最佳选择。
对于您要发送通知的视图:
- (void) viewDidLoad {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateView:) name:@"updateView" object:nil];
}
- (void)updateView:(NSNotification *)notification {
/* this is where the updates will take place,
such as a [tableView reloadData];
*/
}
并致电该通知:
[[NSNotificationCenter defaultCenter] postNotificationName:@"updateView" object:nil];
答案 1 :(得分:4)
执行此操作的一个好方法是让模型在添加新数据时发布通知。您的表视图控制器可以侦听该通知,并在收到该通知后,可以重新加载其数据。
查看Apple对Posting a Notification和Registering for a Notification的解释。
答案 2 :(得分:1)
一种方法是子类化您的父视图并覆盖willRemoveSubview:。这是在从超级视图中删除视图之前调用的。