Как использовать UISplitViewController в Swift
поэтому я добавляю UISplitViewController
к проекту, который встроен с UITabBarController
.
на UISplitViewController
есть UINavigationController
как отношение Master & Detail со своим собственным корневым контроллером.
Мастер UINavigationController
rootController
имеет детальный переход к деталям UINavigationController
.
смотрите здесь:
все довольно просто, верно ? Теперь в TableViewController я делаю следом;
class TableViewController: TableViewController, UISplitViewControllerDelegate {
var collapseDetailViewController: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
splitViewController?.delegate = self
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
collapseDetailViewController = false
}
// MARK: - UISplitViewControllerDelegate
func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool {
return false
}
я также имею расширение UISplitViewController и делаю следующее;
extension UISplitViewController: UISplitViewControllerDelegate {
public override func viewDidLoad() {
self.extendedLayoutIncludesOpaqueBars = true
}
}
со всем этим я получаю следующие проблемы;
-
при нажатии на
tableviewcell
для перехода к детальному просмотру детальный вид открывается в главной левой панели, когда на iPad в ландшафте, а не справа. Я также не могу понять, как показать главный вид как первый вид, когда в портрете на iPad или на iPhone. Эти двое проблемы могут быть или не быть связаны, я не уверен. на мобильном телефоне есть нижняя панель над панелью вкладок, которую я не могу понять, как удалить. У меня была такая же проблема на iPad, пока я добавил код
UISplitViewController
расширенияviewDidLoad
однако это не повлияло на мобильный телефон. См. здесь
PS: Я не уверен, что вопрос слишком Лонг, я чувствовал, что лучше всего поместить все в контекст. Также я провел много исследований, но я не могу найти никаких ресурсов в swift, которые используют UITabBarController.
я следовал следующему руководству http://nshipster.com/uisplitviewcontroller/
2 ответов
вы так близко просто сделать следующее.
сохраните макет split view с подробными сегментами и верните true для следующего метода и удалите остальную часть кода, чтобы сделать с переменной collapseDetailViewController
.
func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool {
return true
}
поместите следующее в контроллер Master View
self.splitViewController!.delegate = self;
self.splitViewController!.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible
self.extendedLayoutIncludesOpaqueBars = true
добавить self.extendedLayoutIncludesOpaqueBars = true
к вашему контроллеру подробного представления, как упоминалось в предыдущем ответе. Это должно удалить панель, появляющуюся на контроллерах представления.
кроме того, если вы требуется дополнительная функциональность добавьте следующее, Если вы хотите, чтобы ваш подробный вид использовал полный экран на iPad.
navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem()
navigationItem.leftItemsSupplementBackButton = true
что касается мастера splitViewController, чтобы быть видимым, вам нужно добавить это в ViewDidLoad splitViewController. Иначе контроллер master view присутствует в виде бокового меню, которое вы можете перетащить в портретном режиме
self.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible;
но этот основной вид детали будет виден только в iphone 6 plus и ipad, иначе он будет действовать как навигационный контроллер. Что касается нажатия viewController на навигационный контроллер, вы пытаетесь нажать навигационный контроллер на еще один навигационный контроллер. Не думаю, что это рекомендуется. Просто переместите segue из контроллера первого вида (где вы вводите текст) во второй(контроллер цветного вида), а не второй навигационный контроллер. Если вам интересно показать подробности в правом разделе для ipad и iphone6, а также в качестве новой страницы для других устройств, вы не должны использовать этот способ, удалите push segue и используйте делегат для передачи информации об изменении и обновлении данных ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.
кроме того, я не думаю, что вам может понадобиться navigationController в качестве страницы сведений, просто цвета viewController может быть достаточно, если вы не заинтересованы в дальнейшей навигации со страницы сведений.
для получения подробной информации о поведении контроллера split view в iphone и iPad, просто проверьте https://www.raywenderlich.com/94443/uisplitviewcontroller-tutorial-getting-started
попробовать добавление self.extendedLayoutIncludesOpaqueBars = true
к viewDidLoad вашего navigationController для проблемы разрыва