2016-04-19 10 views
5

Attualmente dispono di un controller di navigazione personalizzato con elementi del pulsante della barra che sono semplicemente pulsanti di testo. È possibile mantenere il titolo degli elementi del pulsante della barra ma anche impostarli come immagini (immagine icona + titolo sotto).Imposta immagine e titolo per la voce del pulsante barra?

class NavigationController: UINavigationController 
{ 
    var mode: NavigationMode = .Swipe { 
     didSet { 
      self.setButtonAttributes() 
     } 
    } 

    private var leftBarButton: UIBarButtonItem! 
    private var middleBarButton: UIBarButtonItem! 
    private var rightBarButton: UIBarButtonItem! 
    private var rightBarButton2: UIBarButtonItem! 

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

    func configureNavigationItem(navigationItem: UINavigationItem) 
    { 
     //Configure the bar buttons text and actions 


     if (self.leftBarButton == nil) { 
      self.leftBarButton = UIBarButtonItem(title: "Menu1", style: .Plain,target: self, action: "menu1Pressed:") 
     } 
     if (self.middleBarButton == nil) { 
      self.middleBarButton = UIBarButtonItem(title: "Games", style: .Plain, target: self, action: "gamesPressed:") 
     } 
     if (self.rightBarButton == nil) { 
      self.rightBarButton = UIBarButtonItem(title: "Menu3", style: .Plain, target: self, action: "menu3Pressed:") 
     } 
     if (self.rightBarButton2 == nil) { 
      self.rightBarButton2 = UIBarButtonItem(title: "Settings", style: .Plain, target: self, action: "settingsPressed:") 
     } 

     self.setButtonAttributes() 

     navigationItem.leftBarButtonItems = [self.leftBarButton, self.middleBarButton, self.rightBarButton, self.rightBarButton2] 

    } 

Aggiornato:

let button = UIButton(type: .System) 
     button.setImage(UIImage(named: "play"), forState: .Normal) 
     button.setTitle("Play", forState: .Normal) 
     button.sizeToFit() 

     leftBarButton = UIBarButtonItem(customView: button) 

     if (self.leftBarButton == nil) { 
      self.leftBarButton = UIBarButtonItem(title: "Play", style: .Plain,target: self, action: "Pressed:") 
     } 

risposta

17

È possibile creare un'istanza UIButton, impostare un'immagine e un titolo per esso, e quindi creare l'UIBarButtonItem con esso:

let button = UIButton(type: .System) 
    button.setImage(UIImage(named: "YourImage"), forState: .Normal) 
    button.setTitle("YourTitle", forState: .Normal) 
    button.sizeToFit() 
    self.leftBarButton = UIBarButtonItem(customView: button) 

Per aggiungere un'azione :

button.addTarget(self, action: #selector(self.someAction), forControlEvents: .TouchUpInside) 

whe re self.someAction è

func someAction() { 

} 
+0

Grazie! Ho aggiornato la mia domanda. Come posso assegnare l'azione anche a questo? – winston

+0

Vedi risposta aggiornata. –

+0

Ha funzionato alla grande. Grazie! – winston

6

Swift 3:

let button = UIButton(type: .system) 
    button.setImage(UIImage(named: "categories_icon"), for: .normal) 
    button.setTitle("Categories", for: .normal) 
    button.addTarget(self, action: #selector(showCategories), for: .touchUpInside) 
    button.sizeToFit() 
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: button)