2013-06-22 3 views
0

Предположим, что я пытаюсь создать что-то вроде приложения для контактов. У меня есть TableViewController (TVC), где вы выбираете элемент и видите всю информацию об этом. Вы можете нажать на редактирование, а затем появится TVC со статическими ячейками. Этот же TVC также используется для добавления нового элемента.Добавить UINavigationBar в TableViewController, представленный модально?

В настоящее время у меня есть ТВЦ, который я пытаюсь повторно использовать. Когда пользователь редактирует мою модель, я нажимаю TVC в стек навигационной панели, но когда пользователь создает новый элемент, я представляю TVC по модулю.

Очевидно, что при автоматическом нажатии TVC он получает навигационную панель. С другой стороны, когда я представляю его модально, я создаю свой собственный NavigationBar (с кнопками и всем остальным, что мне нужно), и добавляю его как подвью. Это создает две проблемы:

  • NavigationBar находится на верхней части первой ячейки.
  • NavigationBar прокручивает другие ячейки.

Для того, что я читал, это происходит потому, что я добавляю NavigationBar к самому ТВС.
Наличие TableView внутри контроллера навигации звучит как опция, но без TVC я не могу иметь статические ячейки в моем TableView.

Я думал о том, чтобы не использовать мой TVC повторно, но я все равно застрял бы с той же проблемой, что мне нужен TVC с баром сверху.

Как добавить навигационную панель в TVC со статическими ячейками, если она представлена ​​модально? Есть ли другой способ решить эту проблему?

Кстати, я использую раскадровку и я нацеливание iOS6 +, так что я не могу использовать presentModalViewController:

ответ

2

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

С экземпляром UINavigationController вы добавите UINavigationBar.

Получить существующий UITableViewController из раскадровки, используя метод instantiateViewControllerWithIdentifier. Не забудьте сначала установить идентификатор в раскадровке, установив идентификатор раскадровки. Например, ниже я устанавливаю идентификатор как CategoriesViewController.

setting Storyboard ID

Тогда я могу получить его с помощью следующего кода:

UITableViewController *tableViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"CategoriesViewController"]; 
UINavigationController *navcon = [[UINavigationController alloc] initWithRootViewController:tableViewController]; 
[self presentViewController:navcon animated:YES completion:nil]; 
+0

, чтобы убедиться, что я понимаю, что должно было случиться: я все еще могу нажать оригинальную TableViewcontroller («CategoriesViewController») с помощью толкающего Segue , но когда я хочу представить его в текстовом выражении, я представляю недавно созданный навигационный контроллер (с встроенным встроенным TVC) с помощью «presentViewController:» ... и он будет представлен модально, потому что он не связан с каким-либо segue? – Eric

+0

@ Эрик Да. Вы можете попробовать. –

+0

Работает как очарование! Я ценю вашу помощь. Только один быстрый вопрос, не очень важный, но род связанный: на ТВК представленно, почему «self.navigationItem.hidesBackButton = YES;» работает в то время как «self.navigationController.navigationItem.hidesBackButton = YES;» не делает? – Eric

Смежные вопросы