UIButton addTarget Self是如何工作的? [英] How does UIButton addTarget self work?

查看:26
本文介绍了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
  • 上的addTarget:action:forControlEvents方法来执行此操作
  • self参数告诉answerButton要通知事件的对象:它是目标。在此上下文中,selfAnswer对象。
  • 参数"didPressAnswerButton:"指示swerButton应调用哪个方法来响应Tap事件:这是操作

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

还请注意,当您编辑情节提要并按住ctrl键从按钮拖动到视图控制器并选择方法时,您也在使用相同的机制设置目标/操作。您可以通过拖动到视图控制器图标(或其他图标)来选择目标对象,然后在单击弹出窗口中的方法名称时选择操作/选择器。

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

这篇关于UIButton addTarget Self是如何工作的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆