self
AnswerではなくGameViewControllerを指す理由を理解してみます
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)
}
}
Answer.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)
}
}
addTarget:action:forControlEvents:
ユーザーがボタンをタップしたときに、コントロール(answerButton
この場合)に呼び出すメソッドと、それを呼び出すオブジェクトを指示します。コードをより詳細に見る:
answerButton.addTarget(self, action: "didPressAnswerButton:", forControlEvents: .TouchUpInside)
TouchUpInside
イベントが発生します。その場合、オブジェクトのanswerButton
メソッドを呼び出します。didPressAnswerButton:
Answer
answerButton
このTouchUpEventが発生したときに何をするかを伝える必要があります。これを行うには、のaddTarget:action:forControlEvents
メソッドを呼び出します。answerButton
self
引数が告げるanswerButton
イベントについて通知するオブジェクトを何:それはターゲット。このコンテキストでself
は、はAnswer
オブジェクトです。"didPressAnswerButton:"
引数はanswerButtonはタップイベントに応答して呼び出す必要がありますどのような方法を示しています。これは、アクションこれがObjective-C / Cocoaのターゲットアクションメカニズムです。これは非常に一般的なパターンです。リンクされたドキュメントを読んで、その動作についてもう少し学ぶ価値があります。重要なのは、これがObjective-C *メッセージパッシングに基づいていることです。上記のコードで"didPressAnswerButton:"
は、セレクターを示しています。セレクターは、ターゲット(self
)とペアになっている場合、ユーザーがタップしたときにターゲットに「メッセージ」を送信する方法をanswerButtonに指示します。ボタン。
また、ストーリーボードを編集し、ボタンからView ControllerにCtrlキーを押しながらドラッグしてメソッドを選択する場合、これと同じメカニズムを使用してターゲット/アクションも設定することに注意してください。ビューコントローラアイコン(またはその他のアイコン)にドラッグしてターゲットオブジェクトを選択し、ポップアップでメソッド名をクリックするときにアクション/セレクタを選択します。
* Target-Actionは元々Objective-C用に設計されましたが、View Controllerを実装する一般的なケースでは、Swiftが同じように機能すると想定できます。ドキュメントを読むときは、Swiftがアクションに単純な文字列を使用するのに対し、Objective-Cはを使用することに注意してください@selector(...)
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加