具有多个控件的按键
Posted
技术标签:
【中文标题】具有多个控件的按键【英文标题】:Key Down With Multiple Controls 【发布时间】:2013-06-11 07:25:05 【问题描述】:我了解到您使用 (BOOL)control:(NSControl *)control textView:(NSTextView *)inputfield doCommandBySelector:(SEL)commandSelector 来检测 NSTextView 的键> 和用户按下的 NSTextField,如下所示。
- (BOOL)control:(NSControl *)control textView:(NSTextView *)inputfield doCommandBySelector:(SEL)commandSelector
if(commandSelector == @selector(insertNewline:) )
//... a key is down
return YES; // We handled this command; don't pass it on
else
return NO;
我的问题是,当您有多个此类控件时,您如何判断某个键在哪个文本字段下按下。我设置了如下标签来查看特定文本字段的键是否按下,但它不起作用。
- (BOOL)control:(NSControl *)control textView:(NSTextView *)inputfield doCommandBySelector:(SEL)commandSelector
if ([inputfield tag] == 100)
if(commandSelector == @selector(insertNewline:) )
//... a key is down
return YES; // We handled this command; don't pass it on
else
return NO;
else
return NO;
感谢您的建议。
【问题讨论】:
【参考方案1】:你有没有想过,为什么即使你有一个文本字段,它也被输入为文本视图?
问题的原因是编辑不是由控件本身完成的,而是由字段编辑器完成的(通常每个窗口只有一个实例)。您向该字段编辑器询问其标签,并且可能会得到结果 -1。 (这意味着没有标签。)
“真正的”文本字段是字段编辑器的代表。要获得它,您必须向参数询问其委托。接下来,您不应该使用标签,而是将出口设置到文本字段并比较指针。 (因为打字有点麻烦。)
- (BOOL)control:(NSControl *)control textView:(NSTextView *)inputfield doCommandBySelector:(SEL)commandSelector
id realControl = inputfield.delegate;
if (realControl == self.field1)
NSLog(@"I'm 1");
return YES; // We handled this command; don't pass it on
else if (realControl == self.field2)
NSLog(@"I'm 2");
return YES; // We handled this command; don't pass it on
else
return NO;
【讨论】:
嗯...我不知道你是怎么想出来的。这样可行。是的,你说的确实有道理。但我不认为我可以自己解决这个问题。 Objective-C 很复杂。无论如何,非常感谢。 这个系统在 NextStep 的早期就有它的传统。那时优化对于 GUI 框架很重要。 Mac OS 上的单元格也是如此。 youtube.com/watch?v=j02b8Fuz73A以上是关于具有多个控件的按键的主要内容,如果未能解决你的问题,请参考以下文章