0

我了解您使用(BOOL)control:(NSControl *)control textView:(NSTextView *)inputfield doCommandBySelector:(SEL)commandSelector来检测用户按下的NSTextViewNSTextField的键,如下所示。

- (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;
     }
 }

感谢您的意见。

4

1 回答 1

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;
    }
}
于 2013-06-11T08:12:28.040 回答