如何使用给定函数的 @objc 标记在代码中分配按钮的操作?

发布于 2025-01-10 16:33:01 字数 635 浏览 0 评论 0原文

您好,对于这个问题,我在 如何以编程方式创建按钮? 上找到了答案仍然面临错误:“‘#selector’的参数不能引用本地函数‘plusOne(sender:)’”和“@objc只能与类成员、@objc协议和具体扩展一起使用类”。如果你能给建议的话。

let button = UIButton()
button.frame = CGRect(x: 150, y: 300, width: 60, height: 60)
button.setTitle("Click", for: .normal)
button.setTitleColor(UIColor.blue, for: .normal)
button.addTarget(self, action: #selector(plusOne), for: .touchUpInside)
self.view.addSubview(button)
    
@objc func plusOne(sender: UIButton!) {
    self.count += 1 
    self.label.text = "\(self.count)"
}

Hi for this question I found answer on How to create a button programmatically? however still facing the errors: "Argument of '#selector' cannot refer to local function 'plusOne(sender:)'" and "@objc can only be used with members of classes, @objc protocols, and concrete extensions of classes". If you can advice.

let button = UIButton()
button.frame = CGRect(x: 150, y: 300, width: 60, height: 60)
button.setTitle("Click", for: .normal)
button.setTitleColor(UIColor.blue, for: .normal)
button.addTarget(self, action: #selector(plusOne), for: .touchUpInside)
self.view.addSubview(button)
    
@objc func plusOne(sender: UIButton!) {
    self.count += 1 
    self.label.text = "\(self.count)"
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

雪化雨蝶 2025-01-17 16:33:01

您遇到的问题是您将 @objc func plusOne(sender: UIButton!) 嵌套在 viewDidLoad 中(这就是我问有关范围的最初问题的原因)。您需要将其移至类范围方法中。

override func viewDidLoad() {
  // all the usual stuff...

  let button = UIButton()
  button.frame = CGRect(x: 150, y: 300, width: 60, height: 60)
  button.setTitle("Click", for: .normal)
  button.setTitleColor(UIColor.blue, for: .normal)
  button.addTarget(self, action: #selector(plusOne), for: .touchUpInside)
  self.view.addSubview(button)

}

@objc func plusOne(sender: UIButton!) {
    self.count += 1 
    self.label.text = "\(self.count)"
}

The problem you have is that you've nested the @objc func plusOne(sender: UIButton!) within viewDidLoad (which was why i asked the initial question about scope). You need to move it out to a class-scope method.

override func viewDidLoad() {
  // all the usual stuff...

  let button = UIButton()
  button.frame = CGRect(x: 150, y: 300, width: 60, height: 60)
  button.setTitle("Click", for: .normal)
  button.setTitleColor(UIColor.blue, for: .normal)
  button.addTarget(self, action: #selector(plusOne), for: .touchUpInside)
  self.view.addSubview(button)

}

@objc func plusOne(sender: UIButton!) {
    self.count += 1 
    self.label.text = "\(self.count)"
}
云朵有点甜 2025-01-17 16:33:01

该方法的名称是 plusOne(sender:),参数标签构成名称的一部分

The name of the method is plusOne(sender:), the argument labels make part of the name

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文