文本视图不应转发响应者链上的不可撤销命令,-[NSTextInputClient doCommandBySelector:]
为aSelector
:
如果无法调用
doCommandBySelector:
,则NSResponder
不应将此消息传递给响应者链。NSTextInputClient
也实现了这种方法,它确实将响应者链中的不可撤销命令转发,但文本视图不应该。实现NSView,
协议的文本视图继承自NSResponder
继承的NSResponder
,因此您对此方法的实现将覆盖NSResponder
中的方法。它不应该叫超级。
如果我的文字理解不会让我失望,那么最后一句话并没有澄清,只是重新阐述了事情的设置方式。
所以基本上只是一个处方:“文本视图不应该”。周期。
但为什么呢?
我可以理解一个案例,你希望文本视图不对任何/所有import collections
class MyStack:
def __init__(self):
self._data = []
def push(self, value):
self._data.append(value)
def size(self):
#Return the number of elements in the stack
return len(self._data)
def toString(self):
#Return a string representing the content of this stack
return str(self._data)
class MyQueue:
def __init__(self):
self._data = collections.deque([])
def enqueue(self, value):
self._data.append(value)
def dequeue(self):
return self._data.popleft()
def size(self):
#return the number of elements in the queue
return len(self._data)
queue1 = MyQueue()
dq = MyStack()
stack1 = MyStack()
stack1.push(['stone', 'atone'])
print "size of stack is now :" ,stack1.size()
queue1.enqueue(stack1)
print "size of queue is now :", queue1.size()
print "size of stack is now :" ,stack1.size()
stack1.push(['stone', 'shone'])
stack1.push(['stone', 'scone'])
dq = queue1.dequeue() # i would like dq to be ['stone','atone']
print dq.toString()
方法做出反应,但是将它们委托给它的视图控制器,例如。这会引起麻烦吗?这只是建议在macOS应用程序中保持文本视图行为一致吗?
答案 0 :(得分:1)
来自The Key-Input Message Sequence:
如果第一个响应者是文本视图,则键事件进入文本系统。键窗口向文本视图发送keyDown:消息,并将事件作为其参数。 keyDown:方法将事件传递给handleEvent:,它将字符输入发送到输入上下文以进行键绑定和解释。作为响应,输入上下文将insertText:replacementRange:,setMarkedText:selectedRange:replacementRange:或doCommandBySelector:发送到文本视图。
如果文本视图处理键事件并且滚动视图或某个其他视图收到doCommandBySelector:
消息,则不正确。您不能向doCommandBySelector:
发送super
,但您可以将选择器发送给代表。