【问题标题】:Argument of '#selector' cannot refer to global function (Swift)'#selector' 的参数不能引用全局函数(Swift)
【发布时间】:2018-06-23 22:35:40
【问题描述】:

我正在尝试以编程方式将 UIBarButtonItem 添加到我的导航栏(有效),但是我无法使操作生效。我做错了什么?

我在 viewDidLoad 下有以下代码:

self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "visualise"), style: .plain, target: self, action: #selector(visualise(sender:)))

以及在 VC 类之外声明的以下函数:

func visualise(sender: UIBarButtonItem) {
// stuff to do once the button is tapped
}

我阅读了一些答案,说该功能不能是本地的,但这似乎没有帮助。

【问题讨论】:

  • 选择器必须是目标引用的类的一部分。
  • 函数前还需要@objc,否则编译器会报错,函数没有暴露给Objective-C

标签: ios swift uibarbuttonitem uinavigationitem


【解决方案1】:

函数不能是“全局的”。这就是错误所说的。

如果你的函数是在视图控制器之外声明的,那么它就是全局的。

您只能从选择器中调用实例(或静态)函数。

最简单的改变是将你的函数放在视图控制器中。

【讨论】:

  • 这就像一个魅力,非常感谢。让我感到困惑的是,我读到有人说它不能成为任何课程的一部分,所以我认为我不能把它放在他的 VC 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多