2011-08-25 18 views
8

UISearchBarと組み合わせてUISearchDisplayControllerのテーブルビューを使用します。検索バーは、不適切なときにキャンセルボタンを自動的に非表示にしますが、モーダル状態のビューコントローラを使用しています。キャンセルボタンを表示し、検索がキャンセルされたときにモーダルビューコントローラをポップします。UISearchBarにキャンセルボタンを常に表示

カスタム検索バーを作成せずにキャンセルボタンを表示したままにする方法はありますか?

+0

あなたはインスタンスメソッドsetShowsCancelButton呼び出すことによって設定された場合どうなりますか:アニメーション: – Saran

+0

が動作しないデリゲートメソッドで表示するボタンを設定していない、どちらもはありません 'UISearchBar'をサブクラス化し、すべてのオーバーライド'showsCancelButton'メソッドです。 –

答えて

2

あなたは、これは私が多くのことを検索した後solutionを見つけ

- (void) searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller 
{  
    controller.searchBar.showsCancelButton = YES; 
} 
+0

うわー...誰が 'showsCancelButton'を発見しただけで気が気になりませんか?この男>> – dooleyo

1

を使用する必要があります。

現在、私の作品です。コードを追加した後、UISearchBarの代わりにクラスを使用するようにInterface Builderでクラスを変更しました。私はまた、 "ショーキャンセルボタン"を有効にしました。

コード:

//NoAnimatingSearchBar.h 
@interface NoAnimatingSearchBar : UISearchBar 

@end 

//NoAnimatingSearchBar.m 
#import "NoAnimatingSearchBar.h" 

@implementation NoAnimatingSearchBar 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

- (void) _destroyCancelButton { 
    NSLog(@"_destroyCancelButton"); 
} 

-(void)_setShowsCancelButton:(BOOL)showsCancelButton { 
    NSLog(@"_setShowsCancelButton:(BOOL)showsCancelButton"); 
} 
@end 
1

を働く表示デリゲートに

- (void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller 
{ 
    controller.searchBar.showsCancelButton = YES; 
} 
+0

このスレッドは古いですが、このソリューションはプライベートAPIを使用しているようで、アプリのレビュー中にアプリが拒否される可能性があります。 –

関連する問題