2015-09-26 4 views
5

Ich schreibe eine To-Do-Liste Typ App, um schnell für die iOS-Entwicklung zu lernen. Ich hatte eine Einstellungsschaltfläche in der Navigationsleiste auf der rechten Seite, und wenn eine Person auf eine Schaltfläche oberhalb der Tabellenansicht klickte, konnten sie ihrer Liste ein neues Element hinzufügen. Dies führt dazu, dass auf der linken Seite der Leiste eine Schaltfläche "Abbrechen" erscheint und auf der rechten Seite eine Schaltfläche "Hinzufügen" erscheint. Wenn die Person fertig ist, verschwinden diese Schaltflächen jedoch, und so programmiere ich die Einstellungen-Schaltfläche programmatisch neu, mit einem Aufruf einer Funktion, die das Segment aufrufen soll.Selector funktioniert nicht auf meinem schnellen UIBarButtonItem

self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "modify"), style: UIBarButtonItemStyle.Plain, target: nil, action: Selector("showSettings:")) 

Dies ist der Code, der auf die Schaltfläche auf der Navigationsleiste erstellt (und es ist in der Tat erstellt)

func showSettings(sender: AnyObject?) { 
    print("segueShouldBeDone!") 
    performSegueWithIdentifier("showSettings", sender: sender) 
} 

Und dies ist die Funktion, die den Übergang nennen (I sollte hinzugefügt um den Druck zu sehen Sie, ob es zumindest angerufen wurde, und es ist nicht).

Ich hatte das gleiche Problem an einer anderen Stelle in meinem Code, aber ich hatte es aufgegeben, weil es nicht so wichtig für mich war. Aber jetzt stört es, wie die App funktioniert, also wollte ich wissen, wie ich es beheben kann.

Jede Hilfe wäre großartig.

+0

@LeoDabus Obwohl du recht hast und ich hätte das tun sollen, änderte es eigentlich nichts, was mich irgendwie erschreckte. Das Bild wurde bereits gezeigt. – AugustoQ

Antwort

10

Ihr Selektor showSettings: wird nicht aufgerufen, weil Sie nil anstelle von self für das Ziel des Balkenknopfelements angegeben haben. Ändern Sie die Zeile an:

self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "modify"), style: UIBarButtonItemStyle.Plain, target: self, action: Selector("showSettings:")) 

Diese übernehmen die showSettings: Verfahren in der gleichen Klasse, die diese Codezeile enthält.

Lesen Sie die Dokumentation zu diesem Initialisierer, insbesondere die Informationen zum Parameter target.

+0

Ja, das hat es gelöst. Aber selbst wenn meine 'showSettings'-Funktion keine Parameter angenommen hat (und ich" showSettings "als Selektor verwendet habe), hat es nicht funktioniert. Muß der Überleitungssender von "Null" abweichen? An der anderen Stelle, an der ich es benutzt habe (wie in der Frage erwähnt), hat es keine Parameter verwendet, und die Funktion wurde auch nicht aufgerufen. Das verwirrt mich, weil ich damit die Schaltflächen "Hinzufügen" und "Abbrechen" mit "Ziel: Null" erstellt habe, und sie funktionieren gut. – AugustoQ

+0

Das Übergeben von "self" anstelle von "nil" an den Initiator "UIBarButtonItem" hat überhaupt nichts mit dem Parameter "sender" zu tun, der an Ihre Methode 'showSettings:' übergeben wurde und überhaupt nichts mit dem Übergang zu tun hat. – rmaddy

+0

Warum funktionierten meine anderen UIBarButtonItems, wenn sie das Ziel 'nil' hatten, und diese anderen beiden nicht? Irgendwelche Ideen? – AugustoQ