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?

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top