2

UISearchBar を持つ tableView があります。iOS 4 にアップグレードする前に、ユーザーがセルを選択して新しい viewController を押すと、キーボードがテーブルと共に左側にスライドして見えなくなりました。

これで、新しいビューの上に画面が表示されたままになります。[mySearchBar rejectFirstResponder] を呼び出すと、キーボードを取り除くことはできますが、新しいビューが押されている間にキーボードが画面の下部から滑り落ちてしまうため、アニメーションがぎこちなくなります。

iOS 4 で動作が異なる理由を知っている人はいますか? 新しいビューが押されたときにキーボードが画面から滑り落ちるように、キーボードをtableViewに関連付けるにはどうすればよいですか?

ありがとう!

編集: ここにいくつかの追加情報があります。ナビゲーションバーの後ろに uisearchbar があります。ユーザーがボタンを押すとスライドします。次のように uisearchbar を追加します。

[self.navigationController.view insertSubview:self.mySearchBar belowSubview:self.navigationController.navigationBar];

ナビゲーション バーは実際には次のビューに移動しないため (検索バーは移動しますが)、キーボードはそのままです。

tableview の背後に uiview を作成して検索バーを追加しようとしましたが、UINavigationController と私のコード構造が原因で機能しませんでした。

4

1 に答える 1

1

個人的には、UISearchDisplayController を使用する SearchBar を実装することをお勧めします。これは xCode で使用される標準テンプレートを実装し、すべてのレスポンダーを非常にスムーズに処理すると思います。コードにコピーして実行できるメソッドの例を次に示します。

[self addSearchBar:@"enter search keywords here" hasScope:NO]

推奨コード:

- (void) addSearchBar:(NSString*)placeholder hasScope:(BOOL)aScope {


    UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
    [searchBar sizeToFit];

    //searchBar.delegate = self;
    searchBar.placeholder = placeholder;
    self.tableView.tableHeaderView = searchBar;

    if (aScope==YES){
        searchBar.showsScopeBar = YES;
        searchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"Flags",@"Listeners",@"Stations",nil];     
    }




    UISearchDisplayController *searchDC = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];

    // The above assigns self.searchDisplayController, but without retaining.
    // Force the read-only property to be set and retained. 
    [self performSelector:@selector(setSearchDisplayController:) withObject:searchDC];

    //searchDC.delegate = self;
    //searchDC.searchResultsDataSource = self;
    //searchDC.searchResultsDelegate = self;

    [searchBar release];
    [searchDC release];

}
于 2010-07-30T07:03:44.697 に答える