【问题标题】: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;
     }
 }

感谢您的建议。

【问题讨论】:

    标签: objective-c macos cocoa nstextfield


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    相关资源
    最近更新 更多