ios – Swift使用选择器参数,如封闭

我只是想知道是否可以将功能传递给按钮动作(通常是选择器).

例如,通常我会说:

UIBarButtonItem(title: "Press",style: .Done,target: self,action: "functionToCall")

func functionToCall() {
    // Do something
}

但是我想知道是否可以做一些类似的事情:

UIBarButtonItem(title: "Press",action: {
    // Do Something
})

我想这样做的原因是因为我的功能是超级简单的,而且看起来像是更加干净和更Swift,就像他们关闭的重点一样.

解决方法

这是Swift 3的更新解决方案.
class BlockBarButtonItem: UIBarButtonItem {
  private var actionHandler: ((Void) -> Void)?

  convenience init(title: String?,style: UIBarButtonItemStyle,actionHandler: ((Void) -> Void)?) {
    self.init(title: title,style: style,target: nil,action: #selector(barButtonItempressed))
    self.target = self
    self.actionHandler = actionHandler
  }

  convenience init(image: UIImage?,actionHandler: ((Void) -> Void)?) {
    self.init(image: image,action: #selector(barButtonItempressed))
    self.target = self
    self.actionHandler = actionHandler
  }

  func barButtonItempressed(sender: UIBarButtonItem) {
    actionHandler?()
  }
}

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...