一尘不染

具有目标选择器的快速访问控制

swift

看下面的示例代码:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let letterButton = UIButton.buttonWithType(.Custom) as UIButton
        self.view.addSubview(letterButton)
        letterButton.addTarget(self, action:Selector("buttonDidTap:"), forControlEvents: .TouchUpInside)

    }

    func buttonDidTap(button: UIButton!) {
        print(button.char)
    }

}

UIButton只要Selector是 公共的内部的 ,目标操作就可以正常工作,但是如果Selector是 私有的
,则它会由于 无法识别的选择器发送到实例 而崩溃 __

有什么办法可以实现?我不想公开水龙头功能或内部水龙头功能。


阅读 197

收藏
2020-07-07

共1个答案

一尘不染

您需要@objc向objc运行时公开一个私有方法

@objc private func buttonDidTap(button:UIButton!) {
    println(button.char)
}

Xcode6
beta4发行说明

如果没有另外注释,标记为私有的声明不会暴露给Objective-
C运行时。无论访问级别如何,IB出口,IB动作和核心数据管理的属性始终向Objective-C公开。如果需要可从Objective-
C调用的私有方法或属性(例如,对于使用基于选择器的回调的较旧API),请在声明中显式添加@objc属性。!

2020-07-07