2015-08-01 7 views
9

UITabBarController выталкивается в стек:кнопка Edit не отображается в MoreNavigationController UITabBarController в

let presenter = presentingViewController as! UINavigationController 
let tabvc = UITabBarController() 
tabvc.viewControllers = vcs 
tabvc.customizableViewControllers = vcs 
presenter.pushViewController(tabvc, animated: true) 

После представил больше кнопки вкладки показывает правильно, но кнопки редактирования, чтобы переставить панель вкладок не делает. Согласно docs on the MoreNavigationController:

Интерфейс для стандартного Подробнее элемента включает кнопку Edit, которая позволяет пользователю перенастроить панель вкладок. По умолчанию пользователю разрешено переупорядочить все элементы на панели вкладок. Если вы не хотите, чтобы пользователь мог изменить некоторые элементы, вы можете удалить соответствующие контроллеры из массива в свойстве customizableViewControllers .

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

+0

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

+1

@RoryMcKinnel: Ответ на ** memmons **, это обычная ситуация с приложениями, которые требуют, скажем, * login * или * onboarding *. Вы начинаете с контроллера навигации, а затем должны каким-то образом перейти на контроллер панели вкладок. – SwiftArchitect

+0

@SwiftArchitect Я получаю прецедент, но вы можете реализовать это несколько способов, которые лучше подходят для работы с контроллерами контейнеров. Поэтому мой комментарий о том, действительно ли он должен быть вытолкнут с контроллера навигатора, учитывая, что он представляет его, скорее всего, решит проблему. Как хорошо сказано в вашем ответе 8 ^). –

ответ

16

У вас могут быть как UINavigationController, так и UITabBarController; с помощью Storyboard помогает понять проблему лучше, любое из этих решений будет работать:

  1. Начните с UITabBarController как исходного контроллера представления
  2. Использование presentViewController вместо pushViewController
  3. Использование модальных Storyboard SEGUE для выполнения модальное представление
  4. Динамическое изменение rootViewController

Initial Design View Controller

Когда Tab Bar Controller является исходным View Controller, то кнопку Edit отображается нормально.

enter image description here


Выдвинутый Дизайн

Другой Навигационный контроллер являетсяначальный View Controller, используя один из 5 адаптивного действий Segue:

  • Показать
  • Пользовательских

-> Нет Редактировать кнопки, так как он находится в прямом противоречии с родителем UITableViewController.

  • Показать детали
  • Present модально
  • поповер Презентация

->Edit кнопка отображается, как ожидалось.

enter image description here


Код

1. Программа Модальные

Используя точный код, представленный в этом вопросе, измените последнюю строку:

let presenter = presentingViewController as! UINavigationController 
let tabvc = UITabBarController() 
tabvc.viewControllers = vcs 
tabvc.customizableViewControllers = vcs 
presenter.presentViewController(tabvc, animated: true, completion: nil) 

2. Раскадровка Модаль

в соответствии с темой Storyboard, создайте серию нужного типа, назначьте идентификатор (т. presentModallySegue) и 5 ​​строк выше этой сталь одной линии:

self.performSegueWithIdentifier("presentModallySegue", sender: self) 

3. Корень Обмен

Более радикальное решение включает замену из контроллер представления корня на уровне window:

let tabvc = UITabBarController() 
tabvc.viewControllers = vcs 
tabvc.customizableViewControllers = vcs 
self.view.window!.rootViewController = tabvc 

Заключение

Либо изменить дизайн принять Bar Controller Tab в качестве исходного View Controller или представить Tab Bar Controller модально.

5

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

Если вы не показывают панели навигации для вас навигации контроллера, вы сможете снова увидеть кнопку Редактировать при нажатии на вкладку Более.