2012-05-20 2 views
11

Ho un'app basata su UINavigationController. Posso programatically impostare il titolo del UINavigationBar dall'interno metodo viewDidLoad di mio controller della vista:UINavigationBar titolo modificabile?

self.navigationItem.title = m_name; 

Posso fare in modo che il documento nella barra di navigazione è modificabile? IE. Voglio che l'utente sia in grado di toccare il titolo nella barra di navigazione e di essere in grado di modificarlo.

È possibile? E se è possibile, è probabile che soddisfi le linee guida per l'interfaccia umana di Apple? (Questo post suggerisce lo farà, ma non mi dice come implementarlo - Make UINavigationBar title editable)

Molte grazie

Nathan

risposta

20

si è in grado di impostare una visualizzazione personalizzata per il titolo.

vista titleView

Una consuetudine visualizzato al centro della barra di navigazione quando il ricevitore è la prima voce.

@property UIView (, mantenere nonatomic) * titleView

Discussione

Se questo valore della proprietà è pari a zero, il titolo dell'articolo di navigazione è visualizzato al centro della barra di navigazione quando il ricevitore è l'elemento principale . Se si imposta questa proprietà su un titolo personalizzato, viene visualizzato anziché il titolo. Questa proprietà viene ignorata se leftBarButtonItem è non è nulla.

Le viste personalizzate possono contenere pulsanti. Utilizzare il pulsanteWithType: metodo nella classe UIButton per aggiungere pulsanti alla vista personalizzata nello stile della barra di navigazione . Le viste titolo personalizzate sono centrate sulla barra di navigazione e possono essere ridimensionate per adattarsi.

Se si desidera posizionare un UITextField in titleView, è possibile assegnargli uno sfondo ClearColor e impostarlo in modo che non contenga alcun bordo. Wala hai un titolo UINavigationBar che puoi toccare e modificare.

+0

Grazie per la risposta Ryan. +1 per la risposta, e anche l'ortografia comica di 'voilà' :). Cheers –

+0

LOL felice di poter aiutare e commettere crimini di grammatica allo stesso tempo. :) Happy Coding. –

+0

Qualcuno sa come fare questo con una larghezza flessibile? Se ruoto il mio dispositivo, voglio che il campo di testo cambi la sua larghezza allo stesso modo dell'etichetta del titolo. –

0

Si può mettere un campo di testo proprio sopra la barra di navigazione, e impostarlo nascosto/non abilitato., utilizzare un riconoscitore di gesti per rilevare un tocco sulla barra di navigazione e impostare il campo di testo su abilitato/non nascosto. Poi, nel campo di testo, hai terminato il metodo di modifica, impostalo nuovamente nascosto e imposta il titolo della barra di navigazione su quello del campo di testo.

0

Aggiungi un campo di testo nascosto sopra barra di navigazione, così via toccando, sarà popup una tastiera e l'utente può inserire il testo in quello.

ottenere l'evento pulsante di ritorno, là è possibile modificare la barra di navigazione del testo con il testo appena aggiunto. E nascondi di nuovo il campo di testo.

Godetevi codifica :)

0

mettere un textField sul NavigationBar e impostare il colore di sfondo con textField l'opacità a zero.

11

La soluzione di Ryan è giusta. Nel caso in cui qualcuno abbia problemi ad implementarlo, ecco alcuni esempi di codice che dovrebbero farti andare. Basta incollarlo in ViewDidLoad su qualsiasi classe con un controller di navigazione.

UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(0, 0, 200, 22)]; 
textField.text = @"Insert Title Here"; 
textField.font = [UIFont boldSystemFontOfSize:19]; 
textField.textColor = [UIColor whiteColor]; 
textField.textAlignment = NSTextAlignmentCenter; 
self.navigationItem.titleView = textField; 

E se il progetto non fa uso di ARC, assicurarsi di rilasciare il textField in questo modo:

UITextField *textField = [[[UITextField alloc]initWithFrame:CGRectMake(0, 0, 200, 22)]autorelease]; 

o in questo modo:

[textField release]; 

Speranza che aiuta.

+0

Come si dimensiona dinamicamente? – Zorayr

2

soluzione di Ryan per SWIFT

let textField = UITextField(frame: CGRect(x: 0, y: 0, width: 200, height: 22)) 
textField.text = "Title" 
textField.font = UIFont.systemFontOfSize(19) 
textField.textColor = UIColor.whiteColor() 
textField.textAlignment = .Center 
self.navigationItem.titleView = textField