我有一个 TabBar 应用程序,带有一个“主页”选项卡和一个“搜索”选项卡。在主页选项卡中,我有一个搜索栏,当用户单击搜索时,我想将文本字符串复制到搜索选项卡的视图控制器中并使用该字符串执行搜索。
为了传递字符串,我尝试发送通知,然后强制 TabBarController 切换选项卡。这两个步骤都有效;问题是,我只会在加载后添加观察者(在搜索视图控制器中),这只会在我第一次加载视图后发生。换句话说,通知是在观察者被正确设置之前发送的,因此它被忽略了。
这个问题的最佳解决方案是什么?
编辑:
在主视图控制器上:
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
[[self tabBarController] setSelectedIndex:2]; // Switch to Search VC
[[NSNotificationCenter defaultCenter] postNotificationName:@"SearchFromHome" object:self userInfo:@{@"Query" : [searchBar text]}];
}
在搜索视图控制器上:
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(searchFromHome:) name:@"SearchFromHome" object:nil];
}
除非我先加载,否则搜索视图控制器不会观察到通知;方法searchFromHome:
没有被调用。
如果我尝试在应用程序加载后立即执行搜索(它在 Home VC 中加载),通知将被忽略,因为 Search VC 尚未设置为观察它。