2016-07-18 9 views
0

Ich habe diese Symbolleiste in meinem Navigationscontroller. Nun, was ich versuche zu tun, ist, wenn der Benutzer ein Element (UIBarButtonItem) in meiner Symbolleiste auswählt, dieses Element mit einer Hintergrundfarbe markiert, bis entweder der Benutzer die Auswahl des Elements aufhebt oder ein anderes Element auswählt. Wie würde ich das tun?Swift - UIToolbar Element ausgewählt Zustand

Hier meine Wähler Methoden für jedes Element der Werkzeugleiste wieder, ich verbinden sie über Storyboard:

@IBAction func addText(sender: AnyObject) { 
     annotationSelected = 3 
} 

@IBAction func drawCircle(sender: AnyObject) { 
    annotationSelected = 1 
} 

@IBAction func drawRectangle(sender: AnyObject) { 
    annotationSelected = 2 
} 

@IBAction func drawStamp(sender: AnyObject) { 
    annotationSelected = 4 
} 

Das ist alles, was ich getan habe. Hier ist ein Screenshot von meiner Symbolleiste:

enter image description here

Hier ist, was ich habe:

@IBOutlet var textToolButton: UIBarButtonItem! 

    @IBOutlet var circleToolButton: UIBarButtonItem! 

    @IBOutlet var rectangleToolButton: UIBarButtonItem! 

    @IBOutlet var stampToolButton: UIBarButtonItem! 

dann

textToolButton.target = self 
     textToolButton.style = .Done 
     textToolButton.action = #selector(ViewController.barButtonPressed) 

     let selectedBackgroundColor = UIImage(color: .redColor()) 

     textToolButton.setBackgroundImage(selectedBackgroundColor, forState: UIControlState.Highlighted, style: .Done, barMetrics: UIBarMetrics.Default) 

und dann die Methode

func barButtonPressed(sender: UIBarButtonItem) { 

     print(sender) 
     annotationSelected = sender.tag 
    } 

backg Runde ändert immer noch nicht die Farbe

Antwort

1

Ich finde eine gleiche Frage. Kann dir helfen. custom-pressed-uibarbuttonitem-backgrounds

Ich finde eine einfache Methode zu tun. Sie können eine Schaltfläche an die Werkzeugleiste ziehen, und Sie werden so sehen.

Und Sie sollten den Knopf Typ und Bild ändern. storyboard screenshot

dann sollten Sie die Schaltfläche mit Ihrem ViewController verknüpfen.

@IBOutlet weak var textToolButton: UIButton! 

und Sie können tun.

let selectedBackgroundColor = UIImage(color: .redColor()) 
textToolButton.setBackgroundImage(selectedBackgroundColor, forState: .Highlighted) 

Vielleicht kann ich Ihnen helfen.

+0

Ich kann kein Bild hochladen. Weil ich keine 10 Reputationen habe. –

+0

Dies ist für UIButtons nicht UIBarButtonItem – user979331

+0

Es tut mir leid, ich kann meine Idee nicht ausdrücken. UIBarButtonItem * barButtonItem = [[UIBarButtonItem-Zuordnung] initWithCustomView: customButton]; so können wir customButton ändern, um diese Ziele zu erreichen. –

2

Der sauberste Weg, den Sie tun könnten, ist eine Gesamtfunktion zu erstellen, bei der Sie die ausgewählte Schaltfläche übergeben. Etwas wie folgt aus:

var allButtons = [button1, button2, button3, button4] 

    func resetTabBar (buttonSelected:UIButton) { 
     for button in allButtons { 
      if button == buttonSelected { 
       button.backgroundColor = "Black" 
      } 
      else { 
       button.backgroundColor = "Blue" 
      } 
     } 

    } 

Und dann in Ihren Funktionen, die Sie erstellt haben, geben Sie einfach im Sender wie so:

@IBAction func addText(sender: AnyObject) { 

    resetTabBar(sender) 

} 

Hinweis: Dies ist vorausgesetzt, Sie haben Steckdosen für alle Ihre Tasten. Wenn nicht, füge sie hinzu.

+0

Dies funktioniert nicht für UIBarButtonItem, die nicht haben backgroundColor – user979331

+0

Der Anwendungsfall und der Code funktioniert, kann der Benutzer den Code ändern, wie sie wollen. –