8

このUISearchBarを再作成しようとしています(テーブル検索のサンプルコードを参照)。

代替テキストhttp://img168.imageshack.us/img168/6378/43558113.png

これを行うために私が見たすべての例は、xibの使用を含みますが、プログラムで行う必要があります。問題は、色合いの色を変更すると、キャンセルボタンの色合いも変更されることです。

代替テキストhttp://img243.imageshack.us/img243/1375/screenshot20100527at944.png

何か案は?

4

3 に答える 3

17

検索バーをUISearchDisplayControllerに関連付けると、次のような多くの標準的な外観と動作が魔法のように提供されます。

  • キャンセルボタンに影響を与えない灰色の色合い
  • キャンセルボタンの自動表示/非表示
  • テーブルビューインデックス周辺の幅調整

私のテーブルビューコントローラーでは、次のことを行いました。

- (void)viewDidLoad {
    [super viewDidLoad];

    // setup searchBar and searchDisplayController

    UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];
    [searchBar sizeToFit];
    searchBar.delegate = self;
    searchBar.placeholder = @"Search";
    self.tableView.tableHeaderView = searchBar;

    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-06-30T22:59:25.300 に答える
16

私はScottMcCammonに完全に同意します。

ただし、performSelector:withObject:onを使用するsetSearchDisplayController:ことは私のアプローチではありません。これは、いつでも変更できるプライベートAPIに依存します。Appleがプライベート実装を削除すると、アプリがクラッシュします。

より良い方法はsearchDisplayController:、View Controllerでをオーバーライドして、次のインスタンスを返すことですUISearchDisplayController


- (UISearchDisplayControlelr *) searchDisplayController {
    return yourInstanceOfASearchController;
}
于 2010-10-13T18:42:46.250 に答える
1

setSearchDisplayController:の呼び出しまたはオーバーライドの必要性がわかりませんsearchDisplayController。iOS 4.3.2では、引数として渡されたインスタンスinitWithSearchBar:contentsController:に設定されているように見えます。おそらくこれは以前のiOSリリースでは問題でしたが、現在のリリースでは冗長に見えます。searchDisplayControllerUIViewControllercontentsController

于 2011-05-04T15:41:57.310 に答える