Отключить разрывы строк Option-Enter в NSTextField?
-
06-09-2019 - |
Вопрос
Я хочу запретить ввод символа новой строки в моем 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, чтобы удалить все после разрыва строки, когда придет время скопировать значение из представления в модель?