web-dev-qa-db-ja.com

デフォルトの検索バーで検索文字列が空の場合に[検索]ボタンを有効にする

私のアプリケーションでは、デフォルトのIOS検索バーを使用して検索機能を使用しています。検索用の文字列を配置すると正常に機能しますが、最初の検索後にデータソース全体(元のコンテンツ)を表示する必要があります。 )私の機能は、検索文字列が空の場合、データソース全体を表示することです。私の問題は、デフォルトの検索バーで検索文字列を空にすると、検索ボタンが自動的に非表示状態になることです。検索ボタンを有効にする必要があります。文字列も空です。この問題を修正するようにガイドしてください。

enter image description here

ありがとう。

24
Ganapathy

次のコードを書いてください:)このコードは表示されます検索ボタン空の文字列がある場合。

- (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;
}

それを試してみてください:)ありがとう:)

23
iPatel

実際には、iOS7以降でテスト済みのsearchBar.enablesReturnKeyAutomatically = NO;を設定するだけです。

33
laura

searchBar.enablesReturnKeyAutomatically = NO;

4
Jim75

Swift 3/iOS 10

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

テキストなしのリターンキーを有効にするには、次のコードを使用します

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

  if (searchField) {
    searchField.enablesReturnKeyAutomatically = NO;
  }
2
MilanPanchal

たぶんAppleサイドバグ?。xibファイル設定から自動有効化リターンキーが期待どおりに機能しないため。

次のコードを追加するだけです。

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

    return YES;
}
2
Taka

シンプルSwiftバージョン:

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

受け入れられた回答とほぼ同じですが、iOS 7を使用している場合は、検索バーの変更により、追加のforループが必要になります。

- (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
Bhumit Mehta

これを使用すると、iOS6および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
Ollie

カスタムviewを作成し、そのviewbuttonを1つ追加してキーボードを削除します。 delegate- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBarUISearchBarメソッドのときにそのビューを追加します。そのボタンをクリックして、キーボードと、そのview用に作成したbuttonを辞任します。また、そのボタンをクリックして検索したい場合は、それを行うこともできます。詳細については、画像を参照してください。

enter image description here

1
Girish

もう少し洗練されたソリューションを探している場合は、以下に示すように、再帰を使用して検索バー内のテキストフィールドを見つけることができます。これは、iOS 6、7、またはAppleによる非推奨を除いて他の将来の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;
}
1
ufmike

これがSwiftを使用したソリューションです。それを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
rsc