2015-11-12 3 views
7

Я хочу достичь того же потока, что и приложение Facebook messenger, с контроллером панели вкладок внутри главного представления. См enter image description hereUITabBarController внутри master UiSplitViewController

Ive сделано именно так, как описано в этом ответе Create a TabBar Controller with a Master-detail template?

Однако! Это неправильно работает на iPhone, только на iPad. На iPhone навигация назад не работает. Детальная панель открывается так же, как модальный сек, без возможности перемещения назад. Что может быть ошибкой здесь? Можно ли это сделать даже с помощью стандартного uisplitviewcontroller? Я также попытался встроить навигационный контроллер в tabbarcontroller (сделать navigationcontroller как root в главном представлении), затем он работает для iPhone, но не для iPad.

+0

Вы можете найти некоторую информацию по этому вопросу здесь: Lasse1234

+0

@Zeezer как вы в конечном итоге решить это? – SAHM

+0

@SAHM Не удалось решить проблему, переработал мой поток. Если вы найдете решение, которое работает как для iPad, так и для iPhone, отправьте его, и я его приму. благодаря – Zeezer

ответ

2

В итоге я обошел это, не используя UITabBarController, вместо этого создав CustomTabBarController, который наследует от UIViewController. Пользовательский контроллер имеет UITabBar в нижней части его вида и несколько других UIViewController s, встроенных в Container Views. Пользовательский контроллер устанавливает для свойства isHidden значение true для всего встроенного контроллера просмотра кроме тот, который соответствует выбранной вкладке.

Ниже приведен простой пример с двумя закладками, которые были определены их тегом:

class CustomTabBarController: UIViewController, UITabBarDelegate { 

    @IBOutlet weak var tab1View: UIView! 
    @IBOutlet weak var tab2View: UIView! 
    @IBOutlet weak var tabBar: UITabBar! 

    override func viewDidLoad() { 
     tabBar.delegate = self 
    } 

    func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { 
     tab1View.isHidden = item.tag != 1 
     tab2View.isHidden = item.tag != 2 
    } 
} 

Этот пользовательский контроллер должен быть установлен в корне UINavigationController, которая сама по себе должна быть установлена ​​в качестве главного контроллера из Split View Controller:

Storyboard showing custom tab bar controller in a split view controller

Эта установка работает как для IPad и iPhone:

iPhone screenshot showing split view in combined mode                     iPad screenshot showing split view in split mode

Там являются несколько недостатков этого метода:

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

  • Установка элементов навигационного элемента и элементов панели слева и справа должна выполняться в пределах настраиваемого контроллера панели вкладок при выборе вкладки.

  • Этот метод использует (я думаю) больше памяти, чем обычный UITabBarController, так как все контроллеры дочерних представлений загружаются, как только приложение загружается, а не когда они отображаются в первый раз.

  • Эта настройка приведет к тому, что панель вкладок будет скрыта, если в режиме (портрет) iPhone отображается подробная информация. Это было то, что нужно I, а также поведение в приложении Facebook Messenger, но если вы хотите, чтобы панель вкладок была постоянно виден, этот метод не будет делать этого.

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