检测 Swift 中按钮的点击

Posted

技术标签:

【中文标题】检测 Swift 中按钮的点击【英文标题】:Detecting clicks on a button in Swift 【发布时间】:2014-08-04 23:33:28 【问题描述】:

如何在 Xcode 6 游乐场中检测对 Swift 中以下 UIKit 元素的点击?

let testLabel = UILabel(frame: CGRectMake(0, 0, 120, 40))
testLabel.text = "My Button"

【问题讨论】:

你不使用 UIButton 有什么原因吗? 无,除了我是 Swift 新手。是否有一种简单的方法来检测 UIButton 上的点击? 是的,这就是它的本意。这是一个如何以编程方式制作的示例。 ***.com/a/24102198/716216 @hawkharris 仅供参考:您可以使用 UITapGestureRecognizer 检测对 UILabel 的点击,但是是的,在这种情况下使用 UIButton 更有意义 【参考方案1】:

UILabel 类仅用于在屏幕上显示文本。当然你可以检测到点击(不是点击),但是有一个UIKit 类专门用于处理屏幕上的操作,那就是UIButton

注意:游乐场旨在让您测试代码中的逻辑,而不是事件。如果您想使用 ios 特定的东西,请尝试在 Xcode 6 的 iOS 部分下创建一个单视图应用程序项目。

实现UIButton,假设您在 Xcode 上的 iOS 项目中:

var button = UIButton(frame: CGRect(x: 0, y: 0, width: 150, height: 60))
button.backgroundColor = UIColor.blackColor()
button.layer.cornerRadius = 3.0
button.setTitle("Tap Me", forState: .Normal)
button.addTarget(self, action: "buttonTapped", forControlEvents: .TouchUpInside)

然后,在同一个 ViewController 类上,创建 buttonTapped 方法:

func buttonTapped() 
    println("Button tapped!")

【讨论】:

swift 2.2 使用 -- button.addTarget(self, action: #selector(ViewController.buttonTapped), forControlEvents: .TouchUpInside)【参考方案2】:

在 Swift 3 中,UIButton - 作为 UIControl 的子类 - 有一个名为 addTarget(_:action:for:) 的方法。 addTarget(_:action:for:) 有以下声明:

func addTarget(_ target: Any?, action: Selector, for controlEvents: UIControlEvents)

将目标对象和操作方法与控件相关联。


下面的 Playground 代码展示了如何检测按钮的点击:

import PlaygroundSupport
import UIKit

class ViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        view.backgroundColor = .white

        // Create button
        let button = UIButton(type: UIButtonType.system)
        button.setTitle("Click here", for: UIControlState.normal)

        // Add action to button
        button.addTarget(self, action: #selector(buttonTapped(sender:)), for: UIControlEvents.touchUpInside)

        // Add button to controller's view
        view.addSubview(button)

        // Set Auto layout constraints for button
        button.translatesAutoresizingMaskIntoConstraints = false
        let horizontalConstraint = button.centerXAnchor.constraint(equalTo: view.centerXAnchor)
        let verticalConstraint = button.centerYAnchor.constraint(equalTo: view.centerYAnchor)
        NSLayoutConstraint.activate([horizontalConstraint, verticalConstraint])
    

    // trigger action when button is touched up
    func buttonTapped(sender: UIButton) 
        print("Button was tapped")
    



// Display controller in Playground's timeline
let vc = ViewController()
PlaygroundPage.current.liveView = vc

【讨论】:

以上是关于检测 Swift 中按钮的点击的主要内容,如果未能解决你的问题,请参考以下文章

如何检测用户何时单击 lyft 按钮 swift

如何使用 Swift 检测 iOS 应用程序何时出现在前台? [复制]

在 Swift 3 中检测 iOS9 和 iOS10 上的屏幕锁定或主页按钮按下

使用前台应用程序检测本地通知的点击,swift 4

从强制退出启动应用程序时检测可操作的通知按钮 - Swift

未检测到 SKSpriteNode 触摸