Вопрос

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

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

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

Это было полезно?

Решение

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