2016-08-01 29 views
0

Ich implementiere eine hübsche Standard-Auswahlschaltfläche für ein UINavigationItem (rightBarButtonItem). Die Art und Weise, wie ich vorgehe, wird durch die Funktion viewDidLoad instanziiert. Ich übergebe einen Selektor als Aktion und schreibe dann diese Selektorfunktion außerhalb der viewDidLoad-Funktion.Verweis auf UIBarButtonItem in seiner Selektor-Aktionsfunktion

Offensichtliches Problem ist, die Navigation Auswahltaste ist nicht mehr im Bereich der Auswahlfunktion, so dass ich nicht verweisen und damit arbeiten kann.

Es muss viele Möglichkeiten geben, die Navigationsschaltfläche Auswählen zu implementieren. Ich möchte, dass es sich wie ein Schalter in einer Sammlungsansicht verhält, sodass ich Sammlungsansichtszellen nur auswählen und hervorheben kann, wenn die Auswahltaste gedrückt wurde. Dazu wird meine selector Aktion den myButton.selected booleschen Wert wie einen Schalter ein- und ausschalten (ich glaube also nicht, dass ich hier einen UISwitch brauche).

Genug Erklärung, hier ist der Code;

class GalleryViewController: UIViewController { 

@IBOutlet var collectionView: UICollectionView! 
.... 

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

    //MARK: Select button 
    let mySelector: Selector = #selector(GalleryViewController.selectSelector) 
    let selectButton: UIBarButtonItem = UIBarButtonItem(title: "Select", style: UIBarButtonItemStyle.Plain, target: self, action: mySelector) 

    self.navigationItem.rightBarButtonItem = selectButton 

} 

//MARK: Select Button Function 
func selectSelector() { 
    //Toggle selectButton ON/OFF here, and more 

} 

Wenn Sie eine raffinierte Art und Weise der Schaffung eines navigationbar barButtonItem haben den Zustand des collectionViewCells zu wechseln, würde ich gerne hören! Geben Sie einfach eine vollständige Antwort, nicht davon ausgehen, dass ich viel über alles weiß (immer noch wie ich in Xcode facelroll)

Antwort

1

Sie haben ein paar Optionen; Sie könnten einen Verweis auf die UIBarButtonItem in einer Eigenschaft statt einer lokalen Variablen speichern, so dass Sie es in Ihrer Action-Handler-Funktion verwenden können, oder Sie könnten die Referenz von self.navigationItem.rightBarButtonItem erhalten, aber die einfachste Möglichkeit ist, nur die Tatsache zu nutzen, dass die UIBarButtonItem wird an Ihre Aktion Handler-Funktion übergeben:

func selectSelector(sender: UIBarButtonItem) { 
    //Toggle selectButton ON/OFF here, and more 
} 
+0

Perfekte Verwendung von Absender/Empfänger, danke! – Typhon