5

我通常使用[self.tableView setContentOffset:CGPointMake(0,40)];它来隐藏导航栏下方的 UISearchBar(我设置为 tableView 的标题)。viewDidLoad 中一切正常:加载视图时,searchBar 位于 navigationBar 下方。然后我把同一行代码

[self.tableView setContentOffset:CGPointMake(0,40)]

- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller

但它可以做任何事情:当单击取消按钮时,searchBar 仍然可见。怎么了?

4

2 回答 2

4

以下方法应该做到这一点:

-(void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller{
    [self.tableView setContentOffset:CGPointMake(0,40)];    
}
于 2010-06-15T22:00:56.283 回答
1

下面的方法是从主线程调用的吗?

- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller

你可以这样检查:

if ([NSThread isMainThread]) {
    NSLog(@"Yes it is the main thread.");
}

否则,任何视图更改都不会在屏幕上注册。如果你必须从一个单独的线程修改视图,你可以使用这个:

[self performSelectorOnMainThread:@selector(XXX) withObject:nil waitUntilDone:NO];

我不确定这是否是您的问题,但这是我开始寻找的地方。

于 2009-11-21T00:03:38.707 回答