gpt4 book ai didi

ios - UIButton addTarget 是如何工作的?

转载 作者:搜寻专家 更新时间:2023-10-30 22:26:07 26 4
gpt4 key购买 nike

我尝试找出为什么 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)
}
}

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 触发时要做什么。您可以调用 answerButton
  • 上的 addTarget:action:forControlEvents 方法执行此操作
  • self 参数告诉 answerButton 要通知事件的对象:它是目标。在此上下文中,self 是一个 Answer 对象。
  • "didPressAnswerButton:" 参数指示 answerButton 应调用什么方法来响应点击事件:这就是操作

这是 target-action mechanism objective-C/ cocoa 。这是一种非常常见的模式,值得阅读链接的文档以更多地了解它的工作原理。关键在于这是基于 Objective-C* 消息传递:在上面的代码中,"didPressAnswerButton:" 表示一个选择器,当它与目标配对时 (self), 告诉 answerButton 如何在用户点击按钮时向目标发送“消息”。

另外,请注意,当您编辑 Storyboard并按住 ctrl 从按钮拖动到 View Controller 并选择方法时,您也在使用相同的机制设置目标/ Action 。通过拖动到 View Controller 图标(或其他图标)来选择目标对象,然后在弹出窗口中单击方法名称时选择操作/选择器。

* Target-Action 最初是为 Objective-C 设计的,但对于实现 View Controller 的常见情况,您可以假设 Swift 以相同的方式工作。在阅读文档时请注意,Swift 使用简单的字符串来执行操作,而 Objective-C 使用 @selector(...)

关于ios - UIButton addTarget 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35637041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com