Desativar Option-Enter quebras de linha em NSTextField?
-
06-09-2019 - |
Pergunta
Eu quero impedir de entrar um caractere de nova linha no meu NSTextField, que por padrão é possível através da digitação Option-Enter (ou Option-Return).
Enquanto eu achei alguns páginas explicando como permitir quebras de linha sem ter que usar o modificador de Opção, eu não poderia encontrar qualquer coisa para desativação quebras de linha por completo.
Como isso pode ser feito?
Solução
Você pode criar uma subclasse de NSFormatter e implementar o isPartialStringValid:. ... método para bloquear a nova linha
- (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;
}
Outras dicas
Posso perguntar por que você quiser desativar esse recurso? É uma parte bastante normal do sistema operacional. Tenha em mente que o usuário poderia colar em alguma corda de outros lugares que contém uma quebra de linha e eles vão, em seguida, editar as suas necessidades. Será que talvez seja melhor deixar esse recurso intacta, mas usar um NSFormatter para retirar tudo após a quebra de linha quando é hora para copiar o valor fora da vista para o modelo?