2013-01-11 23 views
23

私のアプリケーションでは、デフォルトのIOS検索バーを使用して検索機能を使用しています。データソース(オリジナルコンテンツ)。私の機能は、検索文字列が空であればデータソース全体を表示することです。私の問題は、デフォルトの検索バーで検索文字列を空にすると、検索ボタンが自動的に状態を隠すことになります。文字列が空であっても検索ボタンを有効にする必要があります。この問題を解決するためのガイドをしてください。デフォルトの検索バーで検索文字列が空の場合に検索ボタンを有効にする

enter image description here

感謝。

+0

は、カスタム検索バーを作成します。 AFAIK、ネイティブ検索バーでは不可能です。 – Apurv

+0

あなたはユーザータイプやユーザーが検索ボタンを押すとすぐに検索を絞り込みますか? – CRDave

+0

ソーステーブルの内容が高すぎます。私のように検索すると、それは私のためにパフォーマンスの問題を作成することを意味します。データソースにもたくさんの画像が含まれています。 – Ganapathy

答えて

21

あなたのために役立つかもしれない次のコードを記述してください:)このコード表示検索ボタンあなたは空の文字列を持っている場合。

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 
{ 
    [self.searchBar setShowsCancelButton:YES animated:YES]; 
    self.tblView.allowsSelection = NO; 
    self.tblView.scrollEnabled = NO; 

    UITextField *searchBarTextField = nil; 
    for (UIView *subview in self.searchBar.subviews) 
    { 
     if ([subview isKindOfClass:[UITextField class]]) 
     { 
      searchBarTextField = (UITextField *)subview; 
      break; 
     } 
    } 
    searchBarTextField.enablesReturnKeyAutomatically = NO; 
} 

はそれを試してみてください:)感謝:)

+1

こんにちは!私はこのコードを使用していましたが、iOS 7にアップデートしたときにコードが機能しなくなりました。その理由を説明しようとしています。誰かに同じ問題がありましたか? – MaikaDalila

+0

あなたはすでにこの回答を見つけています。http://stackoverflow.com/questions/18971988/search-a-uisearchbar-with-no-text-in-xcode5-ios7 – MaikaDalila

+0

@MaikaDalilaのような貴重なの感謝:) – iPatel

1

キーボードを削除するには1 buttonを追加することviewにカスタムview &を作成します。そのビューを- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBardelegateメソッドUISearchBarのときに追加します。 そのボタンをクリックしてキーボードを終了し、buttonのために作成したviewも辞退します。また、そのボタンをクリックして検索する場合は、同様に行うことができます。 詳細は画像をご覧ください。

enter image description here

2

テキストなし

UITextField *searchField = nil; 
    for (UIView *subview in searchBar.subviews) { 
    if ([subview isKindOfClass:[UITextField class]]) { 
     searchField = (UITextField *)subview; 
     break; 
    } 
    } 

    if (searchField) { 
    searchField.enablesReturnKeyAutomatically = NO; 
    } 
1

受け入れ答えとほぼ同じ。そのけどあなたはiOSの7で作業している場合は、ループのために余分に必要になりますと、リターンキーを有効にするために、次のコードを使用します検索バーの一部の変更により

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 
{ 
    [self.searchBar setShowsCancelButton:YES animated:YES]; 
    UITextField *searchBarTextField = nil; 
    for (UIView *mainview in self.searchBar.subviews) 
    { 
     for (UIView *subview in mainview.subviews) { 
      if ([subview isKindOfClass:[UITextField class]]) 
      { 
       searchBarTextField = (UITextField *)subview; 
       break; 
      } 

     } 
    } 
    searchBarTextField.enablesReturnKeyAutomatically = NO; 
} 
1

これはios 6と7で使用できます:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)search 
{ 
    UITextField *searchBarTextField = nil; 
    for (UIView *mainview in search.subviews) { 
     if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { 
      if ([mainview isKindOfClass:[UITextField class]]) { 
       searchBarTextField = (UITextField *)mainview; 
       break; 
      } 
     } 
     for (UIView *subview in mainview.subviews) { 
      if ([subview isKindOfClass:[UITextField class]]) { 
       searchBarTextField = (UITextField *)subview; 
       break; 
      } 
     } 
    } 
    searchBarTextField.enablesReturnKeyAutomatically = NO; 
} 
1

さらに洗練されたソリューションをお探しの場合は、次のように再帰を使用して検索バー内のテキストフィールドを見つけることができます。これは、リンゴによる廃止を除いて、ios 6,7、または他の将来のiosで動作するはずです。

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { 
    UITextField* textField = [self findTextFieldInView:searchBar]; 
    if (textField) { 
     textField.enablesReturnKeyAutomatically = NO; 
    } 
} 

-(UITextField*)findTextFieldInView:(UIView*)view { 
    if ([view isKindOfClass:[UITextField class]]) { 
     return (UITextField*)view; 
    } 
    for (UIView* subview in view.subviews) { 
     UITextField* textField = [self findTextFieldInView:subview]; 
     if (textField) { 
      return textField; 
     } 
    } 
    return nil; 
} 
26

が実際にあなただけ設定することができますここでのiOS 7+

+3

私は試して、うまくいきませんでした... – rsc

+0

奇妙にそれは動作します... UIビルダーのフラグをオフにしても機能しませんが、これを追加viewDidLoadの行:とトリックしました。マジック。 –

0

でテストsearchBar.enablesReturnKeyAutomatically = NO;はスウィフトを使用してソリューションです。 viewDidLoad関数に貼り付け、コード内にsearchBarのIBOutletがあることを確認してください。(以下私の例には、inputSearchBar変数IBOutletある)

// making the search button available when the search text is empty 
    var searchBarTextField : UITextField! 
    for view1 in inputSearchBar.subviews { 
     for view2 in view1.subviews { 
      if view2.isKindOfClass(UITextField) { 
       searchBarTextField = view2 as UITextField 
       searchBarTextField.enablesReturnKeyAutomatically = false 
       break 
      } 
     } 
    } 
0

単純スウィフトバージョン:

if let searchTextField:UITextField = searchBar.subviews[0].subviews[2] as? UITextField { 
       searchTextField.enablesReturnKeyAutomatically = false 
} 
1

スイフト3/IOSの10

for view1 in searchBar.subviews { 
     for view2 in view1.subviews { 
      if let searchBarTextField = view2 as? UITextField { 
       searchBarTextField.enablesReturnKeyAutomatically = false 
       break 
      } 
     } 
    } 
1

searchBar.enablesReturnKeyAutomatically = NO ;

1

多分リンゴのサイドバグですか? .xibファイルの自動有効化戻り値キーが期待通りに機能しないためです。

ただ、次のコードを追加します。

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar { 
    searchBar.enablesReturnKeyAutomatically = NO; 

    return YES; 
} 
関連する問題