如何将方法添加到NSTableViewDelegate协议?
我想用几个自定义方法来扩展NSTableViewDelegate
协议。例如,我希望我的自定义NSTableView
子类通知代表某些特定事件。是否有可能不创建另一个协议,而是添加自定义方法到现有的方法?这里最好的方法是什么?如何将方法添加到NSTableViewDelegate协议?
我试图编写和扩展到NSTableViewDelegate
,并调用方法,但在此扩展中,我无法访问委托类(我的子类NSViewController
)。这种方式毁了整个想法,因为控制器需要以特定的方式响应事件。
所以:如何将方法添加到NSTableViewDelegate
协议并在委托类中提供实现?
对不起冗长:)
实施例的代码(在项目它还是有些不同,但概念是相同的):
extension NSTableViewDelegate {
func didBecomeFirstResponder(_ tableView: NSTableView) {
isTableViewFirstResponder = true //warning: Use of unresolved identifier 'isTableViewFirstResponder'
}
func didResignFirstResponder(_ tableView: NSTableView) {
isTableViewFirstResponder = false //warning: Use of unresolved identifier 'isTableViewFirstResponder'
}
}
isTableViewFirstResponder
是委托类的属性。 斯威夫特只是不知道在哪里寻找它。我如何指定声明isTableViewFirstResponder
的类?
可以在此协议中添加方法。但是实现将处于扩展状态,没有明显的方法来实现符合协议的类中的其他方法。
您正在扩展NSTableViewDelegate
协议,因此只能看到存在于NSTableViewDelegate
的实现中的内容。 isTableViewFirstResponder
在NSTableViewDelegate
的实现中不存在,因此不为扩展所知。
Afaik不可能将存储的属性添加到扩展中,因此我认为您必须引入额外的Protcol,这也是有意义的。因为它不是代表责任人,而是响应者之一:
protocol NSTableViewResponder {
var isTableViewFirstResponder: Bool {get set}
}
extension NSTableViewResponder {
mutating func didBecomeFirstResponder(_ tableView: NSTableView) {
isTableViewFirstResponder = true
}
mutating func didResignFirstResponder(_ tableView: NSTableView) {
isTableViewFirstResponder = false
}
}
'isTableViewFirstResponder'是委托类的一个属性。我的表视图子类通过问题中描述的2种方法通知其代表关于获得/放弃第一响应者状态,并且委托必须将状态存储在其属性“isTableViewFirstResponder”布尔值中。我只是想在委托类中实现这两种方法,就像所有常见的'NSTableViewDelegate'方法一样。 –
我找不到'isTableViewFirstResponder' [在NSTableView文档](https://developer.apple.com/reference/appkit/nstableviewdelegate)。 – shallowThought
当然,因为它是委托的自定义属性(比如'MyViewController')。 –
'但在这个扩展中,我没有访问委托类' - 你能解释这一点吗?你究竟想如何访问它?如果你添加你的代码会更好。 – user28434
感谢您关注这个问题。添加了一个代码片段。 –
'NSTableViewDelegate'不知道'isTableViewFirstResponder'。我想你想扩展NSTableView而不是委托。 – shallowThought