2015-08-24 4 views
1

Я работаю над добавлением строки поиска в существующее приложение.UISearchController - как выбрать результаты из отфильтрованной таблицы

У меня есть таблица, заполненная данными, загружаемыми с сервера, и я использую новый UISearchController.

У меня есть панель поиска, полностью работающая сейчас, и отображение новой отфильтрованной таблицы результатов по мере ввода пользователем в панель поиска.

Мой вопрос заключается в том, как обращаться с пользователем, выбрав элемент из этой новой отфильтрованной таблицы результатов поиска?

Я добавил новый segue из моего отфильтрованного стола и добавил файл didSelectRowAtIndexPath, который работает нормально - но когда пользователь выбирает элемент из отфильтрованной таблицы, панель поиска остается и после этого отмена отменяет это приложение.

Так что я не уверен, что я должен делать, и как я должен обрабатывать пользователя, выбирающего элементы из отфильтрованной таблицы?

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

Или я делаю это неправильно, и есть способ отбросить выделение обратно из отфильтрованной таблицы обратно в таблицу основного вида управления при выборе пользователем отфильтрованного элемента?

Любая помощь, как всегда, очень благодарна!

ответ

0

Возможно, вы пытаетесь представить новый контроллер из контроллера таблицы. Не делайте этого так, вы должны представить его из контроллера панели поиска.

+0

ОК, но как? У вас есть код/​​пример? – Richard

+0

Просто передайте выбор таблицы контроллеру панели поиска, вы можете использовать пользовательский метод делегирования. После того как контроллер поиска получит вызов делегата, вы можете представить новый контроллер оттуда. Здесь вы можете проверить, как создать делегат http: // stackoverflow.com/questions/626898/how-do-i-create-delegates-in-object-c –

0

Попробуйте отклоняя панель поиска, когда пользователь выбирает отфильтрованную строку таблицы:

[yourSearchController.searchBar resignFirstResponder]; 
+0

Я не думаю, что это отклонит контроллер поиска. Я бы использовал '[yourSearchController rejectViewControllerAnimated: YES complete: nil];' – pandoraEudora

1

Любой выбор таблицы, как вам известно, производится по методу

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

Все, что вам необходимо добавить условие в методе didSelectRowAtIndexPath:, чтобы отличить «полную» таблицу данных от «отфильтрованной» таблицы данных.

В приведенном ниже примере кода я использую Singleton с именем UserData для хранения моего выбора, но существует множество различных реализаций, и предложения приветствуются. (Я не буду вдаваться в то, что синглеты, но если вам интересно, посмотрите this blog от Matt Galloway).

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (mySearchController.active) { 
     // if the search bar is active use filteredData array 
     [[UserData sharedUserData] setSelection:filteredData[indexPath.row]]; 
     // here you can add your segue code 
    } else { 
     // if search bar is not active then use the full data set 
     [[UserData sharedUserData] setSelection:unfilteredData[indexPath.row]]; 
     // here you can add your segue code 
    } 

    // Optional: 
    // if you would like to add a checkmark for selection 
    // first remove any existing checkmarks 
    for (UITableViewCell *cell in [tableView visibleCells]) { 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 

    // then add new check mark 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 

    // and lastly tell the selected cell to deselect 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

Надеюсь, это поможет. Сообщите мне, есть ли у вас какие-либо вопросы или какие-либо предложения по улучшению этого. :)

0

После инициализации searchController, попробуйте установить следующее свойство searchController, что позволит didSelectRowAtIndexPath метод UITableViewDelegate

searchController.dimsBackgroundDuringPresentation = false 
Смежные вопросы