2012-09-06 9 views
6

UIToolbar内のUIBarButtonItemであるUISearchBarを使用して誰かがUISearchDisplayControllerを使用しようとしましたか?iOS - UISearchBarをUIToolbarで使用するUISearchDisplayControllerを使用しています。

これを正常に実行する方法についてのヒントをいただきたいと思います。

検索コントローラがポップアップするたび現在のところ、それはUISearchBarを再描画し、私は通常、あなたが、しかし、ツールバー内の検索バーを配置することを望んでいないUIToolbar

+0

UISearchBarをカスタマイズしますか?それは質問ですか? –

+0

私は2つの質問があると思います: 1.私はUISearchDisplayControllerを付けている場合、UIToolbarにUISearchBarを埋め込むべきではありませんか? 2. UISearchDisplayControllerでUISearchBarの外観を修正すると、これがどのように行われるのですか?現在は再描画され、再配置され、UIToolbarのUISearchBarの外観は保持されません – Rammeln

答えて

5

に似た外観を維持するために苦労しています私がしたことに似た何かをしたいと思うようです。だからここ

は、私はそれをどうやったのか、それはハックと呼ばれることもあるが、それは魔法のように動作します:)

まずあなたは、このようにインターフェイスビルダーでそれを設定する必要があります。

enter image description here

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

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

黒い背景を持つ1ピクセルのラベルをツールバーの下に置きます。 [x = 0、y = 44、width = 320またはframe width、height = 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]; 
        }]; 
} 

を検索終了時、私は素敵なアニメーションで、次を得ます: )

enter image description here

enter image description here

関連する問題