Wie funktioniert UIButton addTarget selbst arbeiten?
Ich versuche herauszufinden, warum self
Punkt der GameViewController statt Antwort
GameViewController.swift
class GameViewController: UIViewController {
var gameplay = QuestionsController(colors: colors)
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(gameplay.answersController.answers[0].button)
}
func didPressAnswerButton(sender: UIButton!) {
sender.setTitle("Im from GameViewController class", forState: .Normal)
}
}
QuestionsController.swift
class QuestionsController {
var question: Question
var answersController: AnswersController
}
AnswersController.swift
class AnswersController {
var answers = [Answer]()
func prepareAnswers() {
let answer = Answer()
answers.append(answer)
}
}
Antwort.swift
class Answer{
let button: UIButton
func prepareButton() {
let answerButton = AnswerButton(type: .System)
answerButton.addTarget(self, action: "didPressAnswerButton:", forControlEvents: .TouchUpInside)
button = answerButton
}
func didPressAnswerButton(sender: UIButton!) {
sender.setTitle("Im from Answer class", forState: .Normal)
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
addTarget:action:forControlEvents:
erzählt die Steuerung (answerButton
in diesem Fall) welche Methode zu nennen, und , was für ein Objekt es nennen, wenn der Benutzer tippt auf die Schaltfläche. Suchen Sie in Ihren code im detail:TouchUpInside
event feuert auf dieanswerButton
, und wenn das passiert, wollen wir eine Methode aufzurufen, diedidPressAnswerButton:
auf eineAnswer
ObjektanswerButton
was tun, wenn das TouchUpEvent feuert. Sie tun dies ruft dieaddTarget:action:forControlEvents
Methode auf dieanswerButton
self
argument weist dasanswerButton
was für ein Objekt zu Benachrichtigen, die über das Ereignis: es ist die Ziel. In diesem Zusammenhangself
ist einAnswer
Objekt."didPressAnswerButton:"
argument gibt an, welche Methode die answerButton rufen soll, in Reaktion auf die Tippen Sie auf ein Ereignis: dies ist die AktionDies ist die target-action-Mechanismus von Objective-C/Cocoa. Es ist ein sehr Allgemeines Muster, das es sich lohnt es zu Lesen der verlinkten Dokumentation zu lernen, ein wenig mehr über, wie es funktioniert. Der Schlüssel ist, dass dieser basiert auf Objective-C* message passing: in den obigen code
"didPressAnswerButton:"
zeigt eine selector, die, wenn gepaart mit einem target (self
), erzählt die answerButton, wie Sie zu senden eine "Botschaft" an das Ziel, wenn der Benutzer tippt auf die Schaltfläche.Beachten Sie auch, dass bei der Bearbeitung ein storyboard und die Strg-Taste aus-Taste, um Ihre view-controller und wählen Sie eine Methode aus, Sie richten auch eine target/action-mit dieser gleiche Mechanismus. Wählen Sie das Ziel-Objekt, indem Sie auf den view-controller-Symbol (oder ein anderes Symbol), und dann Holen Sie die action/selector beim Klick auf den Namen einer Methode im popup.
* Ziel-Aktion war ursprünglich für Objective-C, aber für den Fall der Implementierung einer view-controller, können Sie davon ausgehen Swift funktioniert auf die gleiche Weise. Nur beachten Sie beim Lesen der Dokumentation, dass Swift die einfache Zeichenfolgen für Aktionen, in der Erwägung, dass Objective-C verwendet
@selector(...)
.