据我所知,你使用(BOOL)控件:(NSControl *)控制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;
}
}
感谢您的建议。
答案 0 :(得分:0)
您是否想知道,为什么即使您有文本字段也会将其键入文本视图?
问题的原因是控件本身不是编辑,而是字段编辑器(通常是每个窗口的单个实例)。您要求该字段编辑器获取其标记,并且可能会得到结果-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;
}
}