在NSTextField中禁用Option-Enter换行符?

问题描述 投票:2回答:3

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

当我发现 一些 页面 解释如何 允许 换行符 必须使用Option修饰符,我找不到任何关于 停用 完全换行。

怎样才能做到这一点?

cocoa nstextfield nstextview fieldeditor
3个回答
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;
}

0
投票

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


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;
}
© www.soinside.com 2019 - 2024. All rights reserved.