2016-03-27 7 views
8

Итак, я добавляю UISplitViewController к проекту, который встроен в UITabBarController.Как использовать UISplitViewController в Swift

UISplitViewController имеет UINavigationController в качестве мастера & Детальное отношение к собственному корневому контроллеру.

Мастер UINavigationControllerrootController имеет подробную информацию о деталях UINavigationController.

Смотрите здесь:

enter image description here

Все довольно просто, не так? Теперь в 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 в альбомной, а не справа. Я также не могу понять, как показать Master View в качестве первого вида, когда вы находитесь в «Портрет на iPad» или на iPhone. Эти две проблемы могут быть или не быть связаны Я не уверен.

    enter image description here

  • На Mobile есть нижняя полоса над панелью вкладок, что я не могу понять, как удалить. У меня была та же проблема на iPad, пока я не добавил код в расширениях UISplitViewControllerviewDidLoad, однако это не повлияло на мобильный. Смотрите здесь,

enter image description here

PS: Я не уверен, что если вопрос слишком долго, я чувствовал, что лучше всего поместить все в контексте. Также я проводил много исследований, но я не могу найти какие-либо ресурсы в swift, которые используют UITabBarController.

я сделал следовать следующему обучающей http://nshipster.com/uisplitviewcontroller/

ответ

1

Вы так близки сделать следующее.

Сохраните разметку вида с деталями segues и верните 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 
2

Что касается мастера на splitViewController, чтобы быть видимым, вам нужно добавить это в ViewDidLoad splitViewController в. Иначе контроллер мастер вид присутствует в боковом меню, которое можно перетащить в портретном режиме

self.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible; 

Но этот вид мастер-деталь будет виден только в iphone 6 плюс и только Ipad, в противном случае, он будет действовать так же, как навигационный контроллер. Поскольку для нажатия контроллера viewController на контроллер навигации вы пытаетесь направить навигационный контроллер на другой контроллер навигации. Я не думаю, что это рекомендуется. Просто переместите segue из контроллера первого вида (где вы вводите текст) на второй (контроллер цветового представления) вместо второго контроллера навигации. Если вам интересно показать информацию в правильном разделе для ipad и iphone6, а в качестве новой страницы для других устройств вы не должны использовать этот способ, удалите push-сег и используйте делегат для передачи информации о том, что данные были изменены и обновлены UI.

Storyboard screenshot

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

Для получения более подробной информации о поведении раздельным контроллера представления в Iphone и Ipad, просто проверить https://www.raywenderlich.com/94443/uisplitviewcontroller-tutorial-getting-started

Попробуйте добавить self.extendedLayoutIncludesOpaqueBars = true к viewDidLoad вашего navigationController для выпуска зазора

+0

Итак, я сделал все, что вы сказали, даже посмотрел на учебник raywenderlick (уже сделанный ранее) и создал новый проект в качестве основной детали, чтобы увидеть, как это делает яблоко. Во всех примерах это так, что сначала отображается подробный вид, затем вы возвращаетесь к мастеру - что не имеет для меня никакого смысла, например, посмотрите на приложение настроек, которое вы выбираете в категории, сначала не загружаете общие настройки, а затем возвращайтесь к категориям. Детальное представление все еще загружается в главное окно и теперь имеет два нижних бара: (единственный код в главном atm - 'self.splitViewController ?.preferredDisplayMode = .Automatic' –

+0

, то не показывайте detailViewController. Сделайте это в masterViewController's 'didSelectRowAtIndexPath'. Что я сделал для своего приложения, было 2 раскадровки для ipad и iphone, с и без splitViewController. – shinoys222

+0

действие в навигационной панели deatilVC должно быть установлено в splitVC или master's – shinoys222

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