2016-03-27 23 views
8

Więc dodaję UISplitViewController do projektu, który jest osadzony w UITabBarController.Jak używać UISplitViewController w Swift

Model UISplitViewController ma UINavigationController jako związek szczegółowy z własnym kontrolerem głównym.

Urządzenie Master UINavigationControllerrootController ma szczegółową zmianę detalu UINavigationController.

Zobacz tutaj:

enter image description here

wszystko dość proste, prawda? Teraz w TableViewController robię co następuje;

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 
} 

Mam również rozszerzenie UISplitViewController i wykonaj następujące czynności;

extension UISplitViewController: UISplitViewControllerDelegate { 

public override func viewDidLoad() { 
    self.extendedLayoutIncludesOpaqueBars = true 
} 

} 

Po tym wszystkim otrzymuję następujące problemy;

  • Kiedy dotykając tableviewcell do segue o szczegóły wyświetlić widok szczegółów otwiera w panelu głównego w lewo, gdy na iPadzie w krajobrazie, a nie prawo. Ja też nie mogę dowiedzieć się, jak pokazać Master View jako pierwszy widok, kiedy w portret na iPadzie lub na iPhone. Te dwa problemy mogą, ale nie muszą być powiązane, nie jestem pewien.

    enter image description here

  • Na Mobile nie jest dolny pasek powyżej paska kart, że nie mogę dowiedzieć się, jak usunąć. Miałem ten sam problem na iPadzie aż dodałem kod w rozszerzeniach UISplitViewControllerviewDidLoad jednak, że nie skutkiem jest mobilne. Zobacz tutaj,

enter image description here

PS: Nie jestem pewien, czy pytanie jest zbyt długi, czułem, że najlepiej jest umieścić wszystko w kontekście. Również Robiłem wiele badań, ale nie mogę znaleźć żadnych zasobów w systemie SWIFT, które wykorzystują do UITabBarController.

zrobiłem wykonaj następujące samouczek http://nshipster.com/uisplitviewcontroller/

Odpowiedz

1

Jesteś tak blisko prostu wykonaj następujące czynności.

Zachowaj układ podzielonego widoku z fragmentami szczegółów i zwróć true dla poniższej metody, a resztę kodu zmień ze zmienną collapseDetailViewController.

func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool { 
return true  
} 

umieścić następujące w opanujesz Zobacz kontroler

self.splitViewController!.delegate = self; 

self.splitViewController!.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible 

self.extendedLayoutIncludesOpaqueBars = true 

Dodaj self.extendedLayoutIncludesOpaqueBars = true do kontrolera widoku szczegółów jak wspomniano w poprzedniej odpowiedzi. To powinno usunąć pasek pojawiający się na kontrolerach widoku.

Również jeśli potrzebujesz dodatkowej funkcjonalności, dodaj następujące elementy, jeśli chcesz, aby widok szczegółów działał na pełnym ekranie na iPadzie.

navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem() 
navigationItem.leftItemsSupplementBackButton = true 
2

chodzi o kapitan splitViewController by były widoczne, trzeba dodać to w splitViewController za viewDidLoad. Inny kontroler widok pan jest obecny jako bocznego menu, które można przeciągać w trybie portretowym

self.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible; 

Ale ten mistrz zobacz szczegóły będą widoczne tylko w iPhone 6 Plus i tylko iPad, w przeciwnym razie będzie to działać podobnie jak kontroler nawigacyjny. Jako Do popchnięcia kontrolki viewController do kontrolera nawigacyjnego, próbujesz przepchnąć kontroler nawigacyjny do innego kontrolera nawigacyjnego. Nie sądzę, że jest to zalecane. Wystarczy przesunąć segue od pierwszego kontrolera widoku (gdzie tekst wejście) do drugiego (kolor widok kontrolera), zamiast drugiego kontrolera nawigacyjnego. Jeśli jesteś zainteresowany, aby zobaczyć szczegóły w prawej części do iPada i iphone6 ​​i jako nowa strona dla innych urządzeń, nie powinno się używać w ten sposób usunąć segue Push i używać delegata przekazać informację, że dane są zmieniane i odświeżyć Interfejs użytkownika.

Storyboard screenshot

Również nie sądzę, może trzeba navigationController jako strony szczegółów, tylko kolory viewController może być za mało, jeśli nie jesteś zainteresowany w dalszym nawigacji na stronie szczegółów.

Aby uzyskać szczegółowe informacje na temat zachowania podziału widoku kontrolera w iPhone i iPad, wystarczy sprawdzić https://www.raywenderlich.com/94443/uisplitviewcontroller-tutorial-getting-started

spróbuj dodać self.extendedLayoutIncludesOpaqueBars = true do viewDidLoad navigationController dla emisji szczeliny

+0

Więc zrobiłem wszystko, co powiedziałeś, nawet spojrzałem na samouczek raywenderlick (już to zrobiłem) i stworzył nowy projekt jako główny szczegół, aby zobaczyć, jak robi to jabłko. Wszystkie przykłady mają to, więc widok szczegółów jest pokazywany najpierw, potem wracasz do mistrza - co nie ma dla mnie sensu, np. Spójrz na ustawienia aplikacji wybierz kategorię najpierw nie ładuj ustawień ogólnych, potem wróć do kategorii. Widok szczegółów wciąż ładuje się w oknie głównym i ma teraz dwa dolne pręty :(jedynym kodem w głównej atm jest 'self.splitViewController? .preferredDisplayMode = .Automatic' –

+0

, następnie nie pokazuj szczegółuViewController. Zrób to w masterViewController's 'didSelectRowAtIndexPath' .Co zrobiłem dla mojej aplikacji był 2 storyboard dla ipad i iphone, z i bez splitViewController. – shinoys222

+0

akcja na pasku nawigacyjnym deatilVC powinna być ustawiona na splitVC lub master's – shinoys222

Powiązane problemy