6

UIToolbarのUIBarButtonItemであるUISearchBarでUISearchDisplayControllerを使用しようとした人はいますか?

これを成功させるためのヒントをいただければ幸いです。

現在、検索コントローラーがポップアップするたびにUISearchBarが再描画され、UIToolbarと同様の外観を維持するのに苦労しています。

4

1 に答える 1

5

通常、ツールバー内に検索バーを配置することは望ましくありませんが、私が行ったのと同様のことを実行したいようです。

だからここに私がそれをした方法があります、それはハックと呼ばれるかもしれませんが、それは魅力のように機能します:)

まず、次のようにInterfaceBuilderで設定する必要があります。

ここに画像の説明を入力してください

検索はツールバーの子ではなく、上にあることに注意してください。

検索バーには、「クリアカラー」の背景と柔軟な左、右、幅の自動サイズ変更マスクが必要です。

ツールバーの下に、背景が黒の1ピクセルのラベルを配置します。[x = 0、y = 44、width = 320またはフレーム幅、height = 1]、柔軟な左、右、幅の自動サイズ変更マスク。これは、検索表示コントローラーがテーブルを表示した後、取得した1つの表示ピクセルを非表示にするためです。見る。私が何を意味するかを理解するためにそれなしでそれを試してください。

ツールバーアイテムをセットアップし、それらが必要になるため、必ずそれらのアウトレットを用意してください。

そして今、コードのために..。

検索を開始するとき:

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
    // animate the search bar to the left ie. x=0
    [UIView animateWithDuration:0.25f animations:^{
        CGRect frame = controller.searchBar.frame;
        frame.origin.x = 0;
        controller.searchBar.frame = frame;
    }];
    // remove all toolbar items
    [self.toolbar setItems:nil animated:YES];
}

検索を終了するとき

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller
{
    // animate search bar back to its previous position and size
    // in my case it was x=55, y=1
    // and reduce its width by the amount moved, again 55px
    [UIView animateWithDuration:0.25f 
                          delay:0.0f
                        // the UIViewAnimationOptionLayoutSubviews is IMPORTANT,
                        // otherwise you get no animation
                        // but some kind of snap-back movement 
                        options:UIViewAnimationOptionLayoutSubviews 
                     animations:^{
                         CGRect frame = self.toolbar.frame;
                         frame.origin.y = 1;
                         frame.origin.x = 55;
                         frame.size.width -= 55;
                         controller.searchBar.frame = frame;
                     } 
                     completion:^(BOOL finished){
                         // when finished, insert any tool bar items you had
                         [self.toolbar setItems:[NSArray arrayWithObject:self.currentLocationButton] animated:YES];
                     }];
}

これで私は素晴らしいアニメーションで次のものを手に入れます:)

ここに画像の説明を入力してください

ここに画像の説明を入力してください

于 2012-09-12T19:08:11.743 に答える