您的位置:首页 > 移动开发 > Objective-C

Selector  与 Action 与 NSObjectProtocol 问题

2015-11-01 23:48 459 查看
这是个有意思的题目:

NSTableView 表里,表格有点击和双击Action可以发送Action,就是当你双击表格,点击行或者列的时候,表格会自动向target
发送一个Action,

target 这个是NSControl
里面属性

weak var target:
AnyObject?

你可以编程设置,也可以在nib里面设置。执行操作后,你可以透过 ClickedRow和ClickedColumn
两个属性确定用户点击的是那一行或者那一列。

你通常应该在这个位置进行设置,nib很简单,不说了。

override func loadView() {

super.loadView()

tableColorList.intercellSpacing = NSMakeSize(3, 3)

tableColorList.target = self

tableColorList.doubleAction = Selector("tableViewAction:")

}

我的 tableViewAction
函数是这样。

@IBAction func tableViewAction(sender: AnyObject) {

popover?.close()

if self.delegate!.respondsToSelector(Selector("colorTableController:color:colorName:")) {

self.delegate?.colorTableController(self, color: self.selectedColor(), colorName: self.selectedColorName()!)

}

}

因为是有参数的,所以函数名称后面必须加冒号!!!!。我上次写的博客还提到这个,这次也折腾了好一阵,临时忘记了。

我想说的主要是不是这里。我想说 Selector,
如果判断一个接口的Selector是否存在。也就是

self.delegate!.respondsToSelector

这个函数的调用,它判断接口中是否存在指定的函数。

而这时候,不是只判断函数名,连同参数也要一起判断,这样才是唯一的。

Selector的写法,就是参数名,去掉逗号和类型。

Selector("colorTableController:color:colorName:")

而我的接口函数是:

protocol ATColorTableControllerDelegate: NSObjectProtocol{

func colorTableController(controller: ATColorTableController, color: NSColor, colorName: String )

}

要让 respondsToSelector
可用,接口需要遵循 NSObjectProtocol。

这里就是我想说的。

你总会在某个地方用到这里的功能的,这是个相当常见的技术。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: