5

私は通常[self.tableView setContentOffset:CGPointMake(0,40)];、navigationBar の下にある 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 に答える