我的rootViewController上有一个方法可以禁用我的应用程序中的水平滚动。当用户在一个页面中打开搜索表单时,我希望禁用水平滚动。这是在[搜索]页面上,如下所示:
[设置] - [搜索的] - [人] - [聊天]
该方法工作正常,但只有在首次启动后关闭应用并重新打开时才会正常运行。
这是我的rootViewController上的方法:
// .h
-(void)setScrollDisabled;
// .m
- (void)setScrollDisabled {
_mainScrollView.scrollEnabled = NO;
}
我在searchViewController中激活searchBar时调用它:
-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
...
[self disableHorizontalScroll];
}
-(void)disableHorizontalScroll {
TREAppDelegate *appDelegate = (TREAppDelegate *)[[UIApplication sharedApplication] delegate];
[[appDelegate rootViewController] setScrollDisabled];
}
我知道它确实有效,我只是希望它在应用程序启动时工作,除了它进入前台。如何确保在所有情况下都能获得相同的结果?
答案 0 :(得分:0)
想出来。在我的viewController中需要通知如下:
[[NSNotificationCenter defaultCenter] postNotificationName:TRESearchControllerOpenedNotification object:nil userInfo:@{TRESearchControllerSearchIsActive : @(YES)}];
然后在我的rootViewController中:
[[NSNotificationCenter defaultCenter] addObserverForName:TREActivityControllerOpenedNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * note){
if ([note userInfo][TRESearchControllerSearchIsActive]) {
BOOL searchIsActive = [[note userInfo][TRESearchControllerSearchIsActive] boolValue];
if (searchIsActive) {
[self setScrollDisabled];
}
}
}];
以及适当的声明...