How does UIButton addTarget self work?(UIButton addTarget Self是如何工作的?)
本文介绍了UIButton addTarget Self是如何工作的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我尝试找出为什么self
指向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)
}
}
应答
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
上激发,当发生这种情况时,我们希望调用Answer
对象上的方法didPressAnswerButton:
- 因此,我们需要告诉
answerButton
此TouchUpEvent触发时做什么。您可以调用answerButton
上的 self
参数告诉answerButton
要通知事件的对象:它是目标。在此上下文中,self
是Answer
对象。- 参数
"didPressAnswerButton:"
指示swerButton应调用哪个方法来响应Tap事件:这是操作
addTarget:action:forControlEvents
方法来执行此操作
这是Objective-C/Cocoa的target-action mechanism。这是一种非常常见的模式,阅读链接文档以更多地了解它的工作方式是值得的。关键在于这是基于Objective-C*消息传递的:在上面的代码中,"didPressAnswerButton:"
表示选择器,当与目标(self
)配对时,它告诉swerButton在用户点击按钮时如何向目标发送"消息"。
@selector(...)
。
这篇关于UIButton addTarget Self是如何工作的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:UIButton addTarget Self是如何工作的?
基础教程推荐
猜你喜欢
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01