【问题标题】:Detecting Ctrl + Return or Ctrl + Enter presses检测 Ctrl + Return 或 Ctrl + Enter 按下
【发布时间】:2011-11-13 17:46:05
【问题描述】:

我发现很难找到有关此事的官方消息。

我有一个 TextView 并覆盖 keyDown 事件并尝试检测用户是否按下了 Ctrl + Enter

- (void)keyDown:(NSEvent *)theEvent
{
    if([theEvent modifierFlags] & NSControlKeyMask && /* how to check if enter is pressed??? */)
    {
        NSLog(@"keyDown: ctrl+enter");
        if(_delegate)
        {
            if([_delegate respondsToSelector:@selector(didSomething:)])
            {
                [_delegate performSelector:@selector(didSomething:) withObject:nil];
            }
        }
    }else
    {
        [super keyDown:theEvent];
    }
}

我尝试了不同的方法,但没有任何效果。

有人吗?

(很抱歉问了这么一个琐碎的问题,但我已经google了一段时间了,还没有找到任何东西)

【问题讨论】:

    标签: objective-c cocoa nsevent


    【解决方案1】:
    unichar c = [theEvent charactersIgnoringModifiers] characterAtIndex:0];
    
    if(([theEvent modifierFlags] & NSControlKeyMask) && (c == NSCarriageReturnCharacter || c == NSEnterCharacter) {
        // do stuff
    }
    

    或者,您可以使用委托的textView:doCommandBySelector:

    - (BOOL)textView:(NSTextView *)aTextView doCommandBySelector:(SEL)aSelector {
        // insertLineBreak: is the method sent when a user presses control-return in a text view
        if (aSelector == @selector(insertLineBreak:)) {
                // do stuff
                return YES;
            }
        }
    
        return NO;
    }
    

    【讨论】:

      【解决方案2】:

      除了覆盖-keyDown:,您可以覆盖在文本视图中键入ctrl-return 时发送的keyboard action(插入换行符):

      - (void)insertLineBreak:(id)sender {
          NSLog(@"ctrl-return");
      
          if(_delegate)
          {
              …
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-27
        • 1970-01-01
        • 2018-02-13
        • 2010-12-13
        相关资源
        最近更新 更多