禁用选项 - 在NSTextField中输入换行符?

时间:2009-02-23 17:15:56

标签: cocoa nstextfield nstextview fieldeditor

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

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

如何做到这一点?

3 个答案:

答案 0 :(得分:3)

您可以创建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;
}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

    return NO;
}