【问题标题】:Disable Option-Enter line breaks in NSTextField?在 NSTextField 中禁用 Option-Enter 换行符?
【发布时间】:2009-02-23 17:15:55
【问题描述】:

我想禁止在我的 NSTextField 中输入换行符,默认情况下可以通过键入 Option-Enter(或 Option-Return)来实现。

虽然我发现some pages 解释了如何允许 换行 不必使用Option 修饰符,但我找不到任何完全禁用换行符。

如何做到这一点?

【问题讨论】:

    标签: cocoa nstextfield nstextview fieldeditor


    【解决方案1】:

    您可以创建 NSFormatter 的子类并实现 isPartialStringValid:... 方法来阻止换行符。

    - (BOOL)isPartialStringValid:(NSString **)partialStringPtr 
           proposedSelectedRange:(NSRangePointer)proposedSelRangePtr 
                  originalString:(NSString *)origString 
           originalSelectedRange:(NSRange)origSelRange 
                errorDescription:(NSString **)error
    {
        // the user may have:
        // -- deleted the left most character
        // -- deleted the last character and we have an empty string
        // both cases are valid
        if (proposedSelRangePtr->location == 0)
            return YES;
    
        unichar theChar = [*partialStringPtr characterAtIndex:proposedSelRangePtr->location - 1];
    
        if ([[NSCharacterSet newlineCharacterSet] characterIsMember:theChar]) {
            *error = nil;
            NSBeep();
            return NO;
        }
    
        return YES;
    }
    

    【讨论】:

    • 唷,禁用输入换行符似乎非常麻烦!我会试试你的解决方案,谢谢!
    【解决方案2】:

    请问您为什么要禁用此功能?这是操作系统的一个非常标准的部分。请记住,用户可能会从其他地方粘贴一些包含换行符的字符串,然后他们将根据需要进行编辑。保留这个特性是否更好,但是当需要将值从视图复制到模型时,使用 NSFormatter 删除换行后的所有内容?

    【讨论】:

      【解决方案3】:

      我执行以下代码来防止在使用 Control、Option + Enter (Return) 的情况下出现换行问题。

      - (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector
      {
          if ((commandSelector == @selector(insertNewlineIgnoringFieldEditor:)) || (commandSelector == @selector(insertLineBreak:)))
          {
              return YES;
          }
      
          return NO;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-17
        • 2010-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多