Pergunta

Eu tenho um UITextField, e quando texto é entrado em que, eu quero obter o doubleValue do campo de texto e realizar alguns cálculos e exibi-los em um UITableView.

O delegado para o UITextField adopta o protocolo UITextFieldDelegate, e ambos os implementos textFieldShouldReturn: e textFieldDidEndEditing: métodos. textFieldShouldReturn: demissão de status socorrista que, de acordo com docs também deve gatilho textFieldDidEndEditing :, mas eu nunca ver textFieldDidEndEditing:. chamado

- (BOOL)textFieldShouldReturn:(UITextField*)theTextField {
    if (theTextField == thresholdValue) {
        [thresholdValue resignFirstResponder];
    }
    return YES;
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    [self updateThresholdValue:textField];
}

Pode ser interessante notar que eu também tentei ligar alguns dos eventos TextField para o delegado e ter a updateThresholdValue chamada evento:. Diretamente, mas que não quer trabalhar

Foi útil?

Solução 3

Como mencionado em um dos comentários, eu tentei replicar uma versão mais simples do que eu estava tentando fazer usando um aplicativo HelloWorld, e funcionou na primeira tentativa, sem problemas, apenas como esperado. Diante disso, comecei a me perguntar um pouco.

Em algum lugar em todo o googling eu fiz para tentar obter uma resposta a este problema, deparei com um link onde uma pessoa estava tendo um problema com eventos não disparar a partir de um botão, e descobriu-se que o problema estava relacionado com a vista na qual o botão foi colocado e que vista ter outro subexibição como um igual ao botão, e que subexibição estava de alguma forma comendo os acontecimentos em vez de permitir-lhes para ir onde tinham sido dirigidas. O cenário não era exatamente a mesma que a minha, mas soou perto o suficiente que a investigação iria valer a pena. Apesar de todo o excelente conselhos recebidos aqui, nenhum tinha ainda dado frutos.

Na noite passada, eu decidi completamente re-criar o arquivo nib a partir do zero (fez uma cópia do que eu tinha em primeiro lugar), e eu tenho que trabalhar. A principal diferença parece ser que eu no arquivo nib não-trabalho original, eu tinha arrastado ao longo de um TableViewController da paleta, em seguida, mudou seu tipo à minha subclasse PZTableViewController. Quando eu fiz a mesma coisa no meu novo nib, os eventos não disparou. Se, por outro lado, eu removi o arrastou-over TableViewController e simplesmente arrastado sobre um NSObject e mudou sua classe a PZTableViewController e sondado tudo, tudo "simplesmente funcionou".

Vou tentar perseguir o link que me iniciou nesta linha de pensamento e postá-lo tanto como uma edição ou como um comentário.

Isso também não é uma resposta completa, porque eu ainda não entendem a diferença entre o TableViewController de-the-paleta e meu subclasse. Quando eu descobrir isso, eu vou atualizar esta resposta por editar ou comentário.

Outras dicas

Apenas correu para o mesmo problema que você descreveu. Depois de tentar tudo o que eu poderia pensar que eu adicionei este método delegado:

// if we encounter a newline character return
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{   
    // enter closes the keyboard
    if ([string isEqualToString:@"\n"])
    {
        [textField resignFirstResponder];
        return NO;
    }
    return YES;
}

Agora, os incêndios textFieldShouldEndEditing e os demite primeiro campo de texto de resposta.

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

textFieldDidEndEditing é disparado quando os demissão TextField É o primeiro estado que responde enquanto textFieldShouldReturn é disparado quando o botão de retorno é pressionado.

sons como o seu campo de texto nunca é renunciar como firstResponder. Você pode verificá-lo com bastante facilidade, colocando alguns saída de depuração (como sugerido nos comentários) e apenas navegar para fora do campo de texto com um toque - por exemplo, começar a digitar em seguida, basta tocar fora do campo para forçá-lo a renunciar firstResponder

.

Não tenho certeza se isso ajuda muito, mas parece que um estranho caso você está acertando.

acabei fiação até editingChanged gravar cada única alteração em um campo de texto, em vez de descobrir como para cobrir todos os casos de canto com os retornos de chamada restantes.

Muito "eficiente" devido ao android-like "usabilidade" do textFieldDidEndEditing (sarcasmo).

Se você adotou UITextFieldDelegate protocolo em seu controlador de vista, em seguida, escrever a seguinte linha de código no viewDidLoad para ativar os métodos de protocolo acima para seus campos de texto correspondentes:

override func viewDidLoad() {
    //other stuff
    yourTextField.delegate = self
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top