2015-11-15 2 views
15

Provo a creare un NavBar, finora il NavBar non è un problema ma se provo ad aggiungere pulsanti e il titolo mi viene risucchiato.Crea NavBar a livello di codice con Button e Title Swift

mio aspetto NavBar come

let NameHeight = screenHeight * 0.09 
let NameWidth = screenWidth 
let navBar: UINavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: NameWidth, height: NameHeight)) 
self.view.addSubview(navBar) 

così cerco di impostare il mio titolo NavBar come

navigationBar.topItem.title = "some title" 
or 
navigationBar.title = "some title" 

ma entrambi falliscono.
Anche se provo a impostare un pulsante

let btnName = UIButton() 
btnName.setImage(UIImage(named: "imagename"), forState: .Normal) 
btnName.frame = CGRectMake(0, 0, 30, 30) 
btnName.addTarget(self, action: Selector("action"), forControlEvents: .TouchUpInside) 

//.... Set Right/Left Bar Button item 
let rightBarButton = UIBarButtonItem() 
rightBarButton.customView = btnName 
self.navigationItem.rightBarButtonItem = rightBarButton 

questo non mi invia un errore, ma il pulsante non è semplicemente visualizzato

risposta

26

È necessario creare un'istanza di oggetto di navigazione e impostare i tasti destra/sinistra del titolo e ad esso. Dopo aver configurato l'elemento di navigazione, aggiungilo alla barra di navigazione.

let navBar: UINavigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: 320, height: 44)) 
self.view.addSubview(navBar); 
let navItem = UINavigationItem(title: "SomeTitle"); 
let doneItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: nil, action: "selector"); 
navItem.rightBarButtonItem = doneItem; 
navBar.setItems([navItem], animated: false); 
+0

grazie questa già funziona :-) ma ancora il "immagine personalizzata impostata" non riesce per me potrebbe darmi un suggerimento su questo? –

+0

lasciare doneItem = UIBarButtonItem (immagine: image1, landscapeImagePhone: nil, stile: UIBarButtonItemStyle.Plain, bersaglio: nil, l'azione: "Azione 1:") ha risolto –

+0

non funziona per la vista radice –

14

In sostanza la risposta di Azimov in Swift 4

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.setNavigationBar() 
} 

func setNavigationBar() { 
    let screenSize: CGRect = UIScreen.main.bounds 
    let navBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: screenSize.width, height: 44)) 
    let navItem = UINavigationItem(title: "") 
    let doneItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.done, target: nil, action: #selector(done)) 
    navItem.rightBarButtonItem = doneItem 
    navBar.setItems([navItem], animated: false) 
    self.view.addSubview(navBar) 
} 

@objc func done() { // remove @objc for Swift 3 

}