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。
这里就是我想说的。
你总会在某个地方用到这里的功能的,这是个相当常见的技术。
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。
这里就是我想说的。
你总会在某个地方用到这里的功能的,这是个相当常见的技术。
相关文章推荐
- Foundation 之 NSData
- Foundation 之 NSNumber
- Ljava.lang.Object;@ba8a1dc 问题
- Objective-C编码规范:26个方面解决iOS开发问题
- 进阶之路(基础篇)OC——block
- Object oriented design- SOLID principal
- IOS开发基础Object-C( 04)—构造方法和description方法
- Ljava.lang.Object;@ba8a1dc
- 11_常见对象(Object类的使用)
- 《JavaScript高级编程》学习笔记之object和array引用类型
- OC中NSDictionary、NSMutableDictionary、NSSet、NSMutableSet
- 《JavaScript高级编程》学习笔记之object和array引用类型
- ubuntu解决libstdc++.so.6: cannot open shared object file: No such file or directory:问题
- Ljava.lang.Object;@ba8a1dc
- OC中的类别、类扩展与协议
- OC内存管理
- IOS开发基础Object-C(03)—点语法
- 在Objective-C中关于self和super功能用法的疑惑与分析-康大亮
- HANA学院(05)_- SAP HANA分析基础使用-01SAP BusinessObjects Explorer
- Objective-c单例模式的正确写法