Avevo un controller di visualizzazione padre con un titolo davvero lungo. Ciò ha comportato il sanguinamento del testo del pulsante Indietro nel titolo del controller della vista figlio.
Dopo aver provato diverse soluzioni, questo è quello che ho finito per fare (espandendo l'approccio @ john.k.doe):
Utilizzando Xcode 7.2, Swift 2
- Nello Storyboard, aggiungi
Navigation Item
a alla scena Controller vista padre (non il VC figlio)
- Nel
Attributes Inspector
nuovo Navigation Item
, digita un space
carattere nel Back Button
campo. Più su questo più tardi.
- Nel controller della vista padre , aggiungi il seguente codice:
frammento:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
switch segue.destinationViewController {
case is ChildViewController:
navigationItem.backBarButtonItem?.title = ""
default:
navigationItem.backBarButtonItem?.title = "Full Parent Title"
}
}
Spiegazione:
Il tipo di pulsante Indietro appartiene al controller della vista padre. Il Navigation Item
ti dà una maniglia per il pulsante indietro, in modo da poter impostare il titolo nel codice o nello Storyboard.
Nota:
Se si lascia il Navigation Item
Back Button
testo come stringa vuota predefinita, il titolo del pulsante Indietro diventerà "Indietro".
Altri approcci funzionano, perché usare questo ?:
Sebbene sia possibile sovrascrivere il titolo del pulsante Indietro sul controller di visualizzazione figlio, è stata una sfida ottenerne una maniglia fino a quando non è già lampeggiato brevemente sullo schermo.
Alcuni degli approcci costruiscono un nuovo pulsante Indietro e sovrascrivono quello esistente. Sono sicuro che funziona e probabilmente necessario in alcuni casi d'uso. Ma preferisco sfruttare le API esistenti quando possibile.
La modifica title
del controller della vista padre è la soluzione più rapida per alcune situazioni. Tuttavia, questo cambia il titolo principale quindi devi gestire lo stato. Le cose si complicano anche Tab Bar Controller
perché un cambio di titolo causa effetti collaterali con i Tab Bar Item
titoli.