使用目标select器进行快速访问控制

看看这个例子代码:

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) } } 

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

有什么办法可以做到这一点? 我不想让tapfunction公开或内部。

One Solution collect form web for “使用目标select器进行快速访问控制”

你需要@objc来公开私有方法objc运行时

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

从Xcode6 beta4发行说明

如果没有其他注释,标记为private的声明不会暴露给Objective-C运行时。 不pipe他们的访问级别如何,IB网点,IB操作和Core Data托pipe属性都会暴露于Objective-C。 如果您需要从Objective-C调用私有方法或属性(例如,使用基于select器的callback的旧API),请将@objc属性明确添加到声明中。 !

  • Cocoapods ld:找不到-lPods-Projectname的库
  • AVPlayer和MPMoviePlayerController的区别
  • 使用iOS 11中增加的导航栏标题
  • iOS7 UITextView contentsize.height替代
  • iOS JavaScript桥梁
  • 当使用自动布局时,如何调整CALayer的锚点?
  • 在iOS,Android和WP上开发的费用是多less?
  • closuresUITableViewRowAction
  • 最后先进出栈与GCD?
  • 如何强制NSLocalizedString使用特定的语言
  • iPad多任务支持需要这些方向