使用多个控件按键

时间:2013-06-11 07:25:06

标签: objective-c macos cocoa nstextfield

据我所知,你使用(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;
     }
 }

感谢您的建议。

1 个答案:

答案 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;
    }
}