rootViewController实例方法仅在应用程序进入前台

时间:2015-07-17 21:43:06

标签: ios objective-c

我的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];
}

我知道它确实有效,我只是希望它在应用程序启动时工作,除了它进入前台。如何确保在所有情况下都能获得相同的结果?

1 个答案:

答案 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];
    }
}

}];

以及适当的声明...