2016-03-27 36 views
8

Quindi aggiungo uno UISplitViewController a un progetto che è incorporato con un UITabBarController.Come utilizzare un UISplitViewController in Swift

Il UISplitViewController ha un UINavigationController come master & rapporto Particolare con il proprio controllore radice.

Il Master UINavigationControllerrootController ha un dettaglio seguito al Dettaglio UINavigationController.

vedere qui:

enter image description here

tutti abbastanza semplice diritto? Ora nel TableViewController faccio quanto segue;

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 
} 

Anch'io ho un'estensione UISplitViewController e faccio quanto segue;

extension UISplitViewController: UISplitViewControllerDelegate { 

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

} 

Con tutto ciò ho avuto i seguenti problemi;

  • Quando toccando tableviewcell al Segue alla visualizzazione dettagliata la visualizzazione dei dettagli si apre all'interno del riquadro a sinistra quando maestro su iPad nel paesaggio, invece di destra. Inoltre, non riesco a capire come mostrare la vista master come prima vista in Portrait su iPad o su iPhone. Questi due problemi possono o non possono essere correlati non ne sono sicuro.

    enter image description here

  • Sul Mobile v'è una barra in basso sopra la barra delle schede che non riesco a capire come rimuovere. Ho avuto lo stesso problema sull'iPad fino a quando ho aggiunto il codice nelle estensioni UISplitViewControllerviewDidLoad, ma ciò non ha influito sul cellulare. Vedi qui,

enter image description here

PS: Non sono sicuro se la domanda è troppo lungo, ho sentito che è meglio mettere tutto nel contesto. Inoltre ho fatto molte ricerche ma non riesco a trovare alcuna risorsa in swift che usi un UITabBarController.

ho fatto seguire il seguente tutorial http://nshipster.com/uisplitviewcontroller/

risposta

1

Sei così vicino basta fare quanto segue.

Mantenere il layout della vista divisa con dettaglio seguito e restituire true per il metodo seguente e rimuovere il resto del codice da fare con la variabile collapseDetailViewController.

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

Inserire il seguente in voi Master View Controller

self.splitViewController!.delegate = self; 

self.splitViewController!.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible 

self.extendedLayoutIncludesOpaqueBars = true 

Aggiungi self.extendedLayoutIncludesOpaqueBars = true al controller vista di dettaglio, come indicato dalla risposta precedente. Questo dovrebbe rimuovere la barra che appare sui controller della vista.

Inoltre, se si desidera funzionalità aggiuntive, aggiungere quanto segue se si desidera che la vista di dettaglio utilizzi lo schermo intero su iPad.

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

Per quanto riguarda master del splitViewController di essere visibile, è necessario aggiungere questo in viewDidLoad di splitViewController. Altrimenti il ​​controller della vista master è presente come un menu laterale che è possibile trascinare in modalità Ritratto

self.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible; 

Ma, questo punto di vista maestro dettaglio sarà visibile solo in iPhone 6 Plus e solo ipad, in caso contrario, si comporterà esattamente come un controller di navigazione. Come per spingere viewController al controller di navigazione, si sta tentando di spingere un controller di navigazione su un altro controller di navigazione. Non penso sia raccomandato È sufficiente spostare il passaggio dal controller della prima visualizzazione (in cui si immette il testo) al secondo (controller della visualizzazione del colore), invece del secondo controller di navigazione. Se sei interessato a mostrare i dettagli nella sezione destra per ipad e iphone6 ​​e come una nuova pagina per altri dispositivi, non dovresti usare in questo modo, rimuovere il push segue e usare un delegato per passare informazioni che i dati sono cambiati e aggiornare UI.

Storyboard screenshot

Inoltre, non credo che potrebbe essere necessario un navigationController come pagina dettagli, solo i colori viewController potrebbe essere sufficiente, se non siete interessati a ulteriore navigazione dalla pagina dei dettagli.

Per informazioni dettagliate sul comportamento di scissione controller della vista in iPhone e iPad, basta controllare https://www.raywenderlich.com/94443/uisplitviewcontroller-tutorial-getting-started

Prova ad aggiungere self.extendedLayoutIncludesOpaqueBars = true al vostro viewDidLoad di navigationController per il rilascio gap

+0

Così ho fatto tutto ciò che hai detto, ho anche guardato il tutorial di raywenderlick (già fatto prima) e ho creato un nuovo progetto come dettaglio principale per vedere come funziona Apple. Tutti gli esempi lo hanno in modo che la vista di dettaglio venga mostrata prima di tornare al master, il che non ha senso per me, per esempio, guarda l'app delle impostazioni che scegli prima la categoria non carica le impostazioni generali e poi torna alle categorie. La vista dettagli viene caricata ancora nella finestra principale e ora ha due barre in basso :(l'unico codice nel master atm è 'self.splitViewController? .preferredDisplayMode = .Automatic' –

+0

quindi, non mostrare il detailViewController. Eseguirlo in masterViewController 'didSelectRowAtIndexPath'. Quello che ho fatto per la mia app era 2 storyboard per ipad e iphone, con e senza splitViewController – shinoys222

+0

l'azione nella barra di navigazione di deatilVC dovrebbe essere impostata su splitVC o master's – shinoys222