我想不允许进入一个新的行符在我NSTextField,默认是可能的选项输入-输入(或选择-返回)。

同时我发现 一些 网页 说明如何 允许 线路断 没有 具有使用修改选项,我找不到任何东西 禁用 线路断了。

怎么可以这样做?

有帮助吗?

解决方案

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

其他提示

我可以问你为什么要禁止这个功能吗?这是操作系统的一个非常标准的一部分。请记住,用户很可能在从其他地方一些字符串包含换行符粘贴,然后他们会修改他们的需要。它或许会更好地离开这个功能不变,但使用NSFormatter线突破后剥离出来的一切,当是时间值缩小视图复制到模型?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top