Подтвердить что ты не робот

Включить кнопку поиска, когда строка поиска пуста в строке поиска по умолчанию

В моем приложении я использую функцию поиска, используя панель поиска по умолчанию IOS. Если я помещаю некоторую строку для поиска, то ее работа прекрасна, но после первого поиска мне нужно отобразить весь источник данных (исходное содержимое.) Моя функциональность - строка поиска пуста, он отобразит весь источник данных. Моя проблема заключается в том, что я делаю строку поиска пустой в строке поиска по умолчанию, кнопка поиска автоматически переходит в состояние скрытия. Мне нужно включить кнопку поиска, даже строка пуста. Пожалуйста, направляйте меня, чтобы исправить эту проблему.

enter image description here

Спасибо.

4b9b3361

Ответ 1

Пожалуйста, напишите, что следующий код может быть вам полезен:) Этот код отображается Кнопка поиска, если у вас пустая строка.

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

Попробуйте:) Спасибо:)

Ответ 2

На самом деле вы можете просто установить searchBar.enablesReturnKeyAutomatically = NO; Протестировано на iOS 7 +

Ответ 3

Используйте следующий код для включения ключа возврата без текста

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

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

Ответ 4

Создайте пользовательский view и на нем view добавьте один button, чтобы удалить клавиатуру. Добавьте этот вид, когда - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar delegate метод UISearchBar. На этой кнопке отмените клавиатуру так же, как и view, которую вы создали для этого button. Также, если вы хотите выполнить поиск по этой кнопке, вы также можете это сделать. Подробнее см. Изображение.

enter image description here

Ответ 5

Он почти такой же, как и принятый ответ, но если вы работаете с 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;
}

Ответ 6

Используйте это, он работает для 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;
}

Ответ 7

Если вы ищете более элегантное решение, вы можете использовать рекурсию, чтобы найти текстовое поле в строке поиска, как показано ниже. Это должно работать на 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;
}

Ответ 8

Swift 3/iOS 10

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

Ответ 9

searchBar.enablesReturnKeyAutomatically = NO;

Ответ 10

Возможно, это ошибка на стороне яблока?. Так как из параметра .xib файла автоматически активировать ключ возврата не работает должным образом.

Просто добавьте следующий код:

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

return YES;}

Ответ 11

Вот решение, использующее Swift. Просто вставьте его в функцию viewDidLoad и убедитесь, что у вас есть IBOutlet вашего searchBar в коде. (в моем примере ниже переменная 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
            }
        }
    }

Ответ 12

Простая быстрая версия:

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