Ats*_*ara 5 self uibutton ios swift addtarget
我试着找出为什么self指向GameViewController而不是Answer
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)
}
}
Run Code Online (Sandbox Code Playgroud)
QuestionsController.swift
class QuestionsController {
var question: Question
var answersController: AnswersController
}
Run Code Online (Sandbox Code Playgroud)
AnswersController.swift
class AnswersController {
var answers = [Answer]()
func prepareAnswers() {
let answer = Answer()
answers.append(answer)
}
}
Run Code Online (Sandbox Code Playgroud)
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)
}
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*ock 12
addTarget:action:forControlEvents:告诉控件(answerButton在这种情况下)当用户点击按钮时,调用什么方法以及调用它的对象.更详细地查看您的代码:
answerButton.addTarget(self, action: "didPressAnswerButton:", forControlEvents: .TouchUpInside)
Run Code Online (Sandbox Code Playgroud)
TouchUpInside事件将触发answerButton,当发生这种情况时,我们想要调用对象didPressAnswerButton:上的方法AnsweranswerButtonTouchUpEvent触发时该怎么做.你这样做调用addTarget:action:forControlEvents方法answerButtonself参数告诉answerButton要通知事件的对象:它是目标.在这种情况下,self是一个Answer对象."didPressAnswerButton:"参数表示answerButton应该响应轻击事件所说的方法:这是动作这是Objective-C/Cocoa 的目标 - 行动机制.这是一种非常常见的模式,阅读链接文档以了解它的工作原理是值得的.关键是这是基于Objective-C*消息传递:在上面的代码中,"didPressAnswerButton:"表示一个选择器,当与target(self)配对时,告诉answerButton当用户点击时如何向目标发送"消息"按钮.
另请注意,在编辑故事板并按住Ctrl键并从按钮拖动到视图控制器并选择方法时,您还可以使用相同的机制设置目标/操作.您可以通过拖动到视图控制器图标(或其他某个图标)来选择目标对象,然后在单击弹出窗口中的方法名称时选择操作/选择器.
*Target-Action最初是为Objective-C设计的,但是对于实现视图控制器的常见情况,您可以假设Swift以相同的方式工作.请注意,在阅读文档时,Swift使用简单的字符串进行操作,而Objective-C则使用@selector(...).
| 归档时间: |
|
| 查看次数: |
7647 次 |
| 最近记录: |