具有多个控件的按键

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

以上是关于具有多个控件的按键的主要内容,如果未能解决你的问题,请参考以下文章

as3键盘游戏控制对角线和多个按键

对于具有不同类型控件的单个视图,我是不是需要多个控制器?

具有多个同名隐藏控件元素的 HTML 表单

具有多个页面的 Windows Phone 8.1 自定义控件

创建多个扩展控件

实现具有相似处理的多个对话框