Не позволяет UISearchDisplayController скрывать UiTable

Я новичок в objC и сейчас экспериментирую с UISearchDisplayController. В основном у меня есть массив строк в качестве моих данных, и я использую UISearchBarDisplayController для фильтрации своих данных. Я могу получить правильные значения, когда я ввожу свой searchText в строку поиска. Однако tableView исчезает, когда мой текст searchBar пуст.

Можно ли предотвратить скрытие tableView в этом случае. Я хочу просто отображать все значения в моем массиве в таблице, если текст searchBar пуст.

Я проверил свойство hidden/alpha/frame таблицы и попытался исправить свою проблему здесь, но я думаю, что здесь я ошибаюсь. Я думаю, нужно ли мне создать подкласс UISearchDisplayController и переопределить [setActive: YES анимированный: YES];? Любой намек будет оценен.


person TheNitram    schedule 14.06.2012    source источник
comment
Попытался создать подкласс UISearchDisplayController и переопределить метод [setActive:animated:] и установить некоторые свойства tableView, чтобы он отображался на экране. Но все равно не повезло, не могу понять это. :(   -  person TheNitram    schedule 14.06.2012


Ответы (3)


Вы должны получать событие для любого изменения параметров поиска, в том числе, когда строка пуста.

Если вы измените свою реализацию этого метода делегата, чтобы проверить, пуста ли строка, вы можете вернуть исходные данные вместо отфильтрованных данных. Это должно достичь того, о чем вы просите, без необходимости создания подклассов.

person lyptt    schedule 14.06.2012
comment
Проблема в том, что tableView не отображается, как только searchController становится активным, вместо этого я вижу только черное наложение. И он исчезает, когда строка поиска пуста. Я попытался вызвать [searchBar: textDidChange:] внутри [searchBarTextDidBeginEditing:], но не могу заставить таблицу отображаться при вызове метода searchBarTextDidBegin. Идеи? - person TheNitram; 14.06.2012

В итоге я работал с UISearchBar и UITable. Итак, вот сценарии, с которыми я столкнулся.

  1. Отображать UITable при нажатии на searchBar.
  2. UITable показывает все данные из моего plist, когда searchText пуст.
  3. UITable показывает отфильтрованные результаты из моего plist, которые соответствуют searchText.
  4. Закройте клавиатуру при нажатии кнопки поиска, но не отключайте кнопку отмены на панели поиска.
  5. Удалите UITable при нажатии кнопки отмены.

У меня пока нет анимации для показа таблицы, но это работает для меня. Кроме того, я разрешил взаимодействие с пользователем и прокрутку таблицы во время поиска, поэтому в этом случае наложение не требуется. Рад, что теперь работает. :)

Я создал пример проекта для тех, кому это может понадобиться. Вот ссылка. Приносим извинения за грязный код и проблемы с утечками. Просто опубликовал это, чтобы поделиться. :)

person TheNitram    schedule 15.06.2012

Вы можете попробовать, всегда оставляя символы ширины с нулевым пробелом в текстовом поле поиска:

static NSString* zsp = @"\u200B";

//In the UISearchBarDelegate

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if(searchBar.text.length == 1 && [text isEqualToString:@""])
    {
        searchBar.text = zsp;
        return NO;
    }

    return YES;
}
person yageek    schedule 31.07.2014