Отключить Option-Enter разрывы строк в NSTextField? - PullRequest
2 голосов
/ 23 февраля 2009

Я хочу запретить ввод символа новой строки в моем NSTextField, что по умолчанию возможно, набрав Option-Enter (или Option-Return).

Хотя я нашел некоторые страниц , объясняющие, как разрешить разрывы строк без необходимости использовать модификатор Option, я не смог найти что-нибудь для , отключив разрывы строк в целом.

Как это можно сделать?

Ответы [ 2 ]

3 голосов
/ 24 февраля 2009

Вы можете создать подкласс 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 голос
/ 01 марта 2009

Могу я спросить, почему вы хотите отключить эту функцию? Это довольно стандартная часть ОС. Имейте в виду, что пользователь может вставить в какую-то строку строку, содержащую разрыв строки, и он затем отредактирует ее по своему усмотрению. Возможно, было бы лучше оставить эту функцию нетронутой, но используйте NSFormatter для удаления всего после разрыва строки, когда пришло время скопировать значение из представления в модель?

...