Невозможно создать кнопку возврата на панели навигации при создании модального представления из ячейки таблицы с панелью поиска - PullRequest
0 голосов
/ 21 декабря 2011

Я создаю приложение для словаря. По сути, это приложение панели вкладок: одна вкладка используется для поиска в словаре, а другие вкладки - для страниц грамматики и т. Д.

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

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

Я создал для этого новый контроллер представления и поместил панель навигации и текстовое представление в файл пера. Однако я не могу сделать так, чтобы кнопка «Назад» появлялась в Интерфейсном Разработчике, и это не произойдет автоматически позже.

Чтобы появился новый вид, я использую следующий код:

- (void)tableView:(UITableView *)tableView
   didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:NO];

    dictEntryViewController *entryView = [[dictEntryViewController alloc]
       initWithNibName:@"dictEntryViewController" bundle:nil];

    [self presentModalViewController:entryView animated:YES];
}

Этот новый вид прекрасно скользит, но на панели навигации нет кнопки возврата. В качестве временного решения я создал обычную кнопку в новом представлении, которая в основном делает это:

[self dismissModalViewControllerAnimated:YES];

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

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

Возможно, мне не следует использовать контроллер модального представления для этого, но, похоже, он работает хорошо, и когда я попробовал некоторые альтернативы (например, pushViewController), он также не позволил появиться кнопке возврата.

Буду признателен за вашу помощь в этом вопросе. Я долго искал решение, но большинство решений, похоже, включают добавление панели навигации в верхней части табличного представления, что я не могу сделать в этом случае.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2011

Если вы уже внедрили Navigation Controller в своем приложении и можете перейти к следующему экрану .... тогда это довольно сложно.

Вы уверены, что вы установили заголовок панели навигации, если нет, то:

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    self.title =@"App Name";
}

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

- (void)tableView:(UITableView *)tableView
   didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:NO];

    dictEntryViewController *entryView = [[dictEntryViewController alloc]
       initWithNibName:@"dictEntryViewController" bundle:nil];

    self.title =@"Back";

    [self.navigationController pushViewController:entryView animated:YES];
    [entryView release];
}

И контроллер навигации, и контроллер PresentModalView работают по-разному, ваше мышление идет по правильному пути. Если это навигация, вы можете использовать стек и поддерживать навигацию внутри приложения, тогда как для PresentModalView он начинается с нуля, как новый вид Вы можете реализовать NavigationController в том же.

0 голосов
/ 21 декабря 2011

Чтобы получить кнопку возврата, вам нужно будет использовать UINavigationController или создать собственную графику кнопки.Однако я бы посоветовал вам посмотреть на документы для UISearchDisplayController и использовать это вместе с UINavigationController.

С UISearchDisplayController, когда вы нажимаете в строке поиска, она перемещается в сторону, поверх верхней панели навигации.Затем, когда вы выбираете строку и помещаете свой контроллер подробного вида в стек навигации, контроллер представления перемещается с помощью кнопки возврата.

Есть небольшая работа, чтобы запустить и запустить UISearchDisplayController, ноконечный результат (ИМО) того стоит.

Вы должны иметь возможность настроить это в IB.В своем основном NIB перетащите UINavigationController и установите его в качестве корневого контроллера представления в качестве контроллера представления списка.В NIB для контроллера представления списка (который, вероятно, является подклассом UITableViewController) перетащите строку поиска и контроллер отображения поиска поверх представления таблицы и подключите все это.Вам нужно будет написать код для фильтрации набора результатов, но я предполагаю, что вы уже сделали это.

...