2015-08-01 14 views
9

Un UITabBarController viene spinto sulla pila:Modifica pulsante non visualizzato in di UITabBarController MoreNavigationController

let presenter = presentingViewController as! UINavigationController 
let tabvc = UITabBarController() 
tabvc.viewControllers = vcs 
tabvc.customizableViewControllers = vcs 
presenter.pushViewController(tabvc, animated: true) 

Una volta presentato il pulsante più scheda mostra in modo corretto, ma il pulsante Modifica per riorganizzare la scheda bar non lo fa. Secondo il docs on the MoreNavigationController:

L'interfaccia per i più oggetto di serie comprende un pulsante Modifica che consente all'utente di riconfigurare la barra delle schede. Per impostazione predefinita, l'utente è autorizzato a riorganizzare tutti gli elementi sulla barra delle schede. Se non si desidera che l'utente di modifichi alcuni elementi, è tuttavia possibile rimuovere i controller di vista appropriati dall'array nella proprietà customizableViewControllers .

La mia ipotesi è che la barra delle schede non è felice di essere in un controller di navigazione. Qualche idea su come riportare il pulsante di modifica?

+0

Qualsiasi motivo per cui è necessario utilizzare un controller di navigazione per contenere il controller della barra delle schede?Come hai notato, penso che questo potrebbe essere il tuo problema. Meglio sarebbe presentare il controller della barra delle schede modally usando 'presentViewController', che è supportato secondo i documenti. –

+1

@RoryMcKinnel: Risposta per ** memmons **, è una situazione comune con applicazioni che richiedono, ad esempio, un * login * o un * onboarding *. Si inizia con un controller di navigazione e in un secondo momento si deve passare a un controller della barra delle linguette. – SwiftArchitect

+0

@SwiftArchitect Ricevo il caso d'uso, ma è possibile implementare una serie di modi che si adattano meglio a come i controller di contenitori amano lavorare. Da qui il mio commento sul fatto che debba essere davvero spinto da un controller nav, dato che presentarlo in modo modesto probabilmente risolverebbe il problema. Come descritto molto bene nella tua risposta 8 ^). –

risposta

16

È possibile avere sia un UINavigationController sia un UITabBarController; utilizzando Storyboard aiuta a capire meglio la questione, una qualsiasi di queste soluzioni funziona:

  1. iniziare con un UITabBarController come controller della vista iniziale
  2. Uso presentViewController invece di pushViewController
  3. Utilizzare un modale Storyboard segue per eseguire una presentazione modale
  4. Scambia lo rootViewController dinamicamente

iniziale Progettazione View Controller

Quando il Tab Bar controller è iniziale View Controller, il pulsante Edit viene visualizzato normalmente.

enter image description here


design Spinto

un altro controllore di navigazione èiniziale View Controller, utilizzando uno dei 5 adattivo Azione Segue:

  • Mostra
  • personalizzato

-> No pulsante Modifica, dal momento che è in diretto conflitto con il genitore UITableViewController.

  • Mostra Dettagli
  • Presente modale
  • Popover Presentazione

-> Modifica pulsante visualizzato come previsto.

enter image description here


Codice

1. Programma modale

Utilizzando il codice esatto presentato nella questione, modificare l'ultima riga:

let presenter = presentingViewController as! UINavigationController 
let tabvc = UITabBarController() 
tabvc.viewControllers = vcs 
tabvc.customizableViewControllers = vcs 
presenter.presentViewController(tabvc, animated: true, completion: nil) 

2. Storyboard Modal

mantenendo con il tema Storyboard, creare un seguito del tipo corretto, assegnare un identificatore (ad es. presentModallySegue) e le 5 righe sopra diventare questo singola linea:

self.performSegueWithIdentifier("presentModallySegue", sender: self) 

3. radice Swap

Una soluzione più drastica consiste sostituendo il controller della vista radice a livello window:

let tabvc = UITabBarController() 
tabvc.viewControllers = vcs 
tabvc.customizableViewControllers = vcs 
self.view.window!.rootViewController = tabvc 

Conclusione

O cambiare il vostro disegno di adottare il Tab Bar controller come View Controller iniziale, o presentare il Tab Bar controller modale.

5

Il motivo è che la barra di navigazione del relatore si sovrappone alla barra di navigazione della sezione Altro.

Se non mostri la barra di navigazione per voi controller di navigazione, si sarà in grado di vedere di nuovo il pulsante Edit quando si tocca la scheda Più.

Problemi correlati