Chciałbym utworzyć dialog kodu PIN, taki jak ten, który można włączyć w telefonie iPhone.Tworzenie dialogu z kodem PIN
Dla tych, którzy jeszcze jej nie widzieli, składa się z czterech pól i klawiatury numerycznej. Po wprowadzeniu cyfry w pierwszym polu pojawi się kropka. I tak dalej. Po naciśnięciu przycisku usuwania ostatnia kropka zostanie usunięta.
mam to skonfigurować jako cztery UITextFields i moim delegatem słucham:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
[self performSelector:@selector(pickNext:) withObject:textField afterDelay:0.0];
return YES;
}
The pickNext: metoda przejdzie do następnego UITextField, jak to:
- (void)pickNext:(UITextField*)textField
{
switch ([textField tag]) {
case 1:
[pin2 becomeFirstResponder];
break;
case 2:
[pin3 becomeFirstResponder];
break;
case 3:
[pin4 becomeFirstResponder];
break;
case 4:
[textField resignFirstResponder];
break;
default:
break;
}
}
to rzeczywiście działa, ale problem polega na tym, że klucz delete nie generuje żadnego powiadomienia, gdy UITextField jest już pusty. Więc nie mam możliwości przejścia do poprzedniego UITextField.
Czy ktoś ma lepsze sugestie, jak rozwiązać ten problem. Myślę o ukrytym textfield ... ??
Cóż, ValueChanged najwyraźniej nie robi nic dla UITextField, przynajmniej nie dostaję żadnych zdarzeń. Ale "Edycja zmieniona" wysyła zdarzenia, ale znowu, nie wtedy, gdy pole jest puste i trafiam klawisz usuwania. – Kobski