- (void)textFieldDidBeginEditing:(UITextField *)textField {
    [textField selectAll:self];
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;    
}

Powyżej textField zaznacza się poprawnie, ale kiedy wracam z klawiatury i stukam textField po raz drugi z rzędu, tekst nie jest zaznaczany. Jeśli nie wybieram go po kolei lub usuwam zaznaczenie tekstu przed powrotem z klawiatury, następny fokus tego pola tekstowego zaznacza tekst poprawnie.

Jak mogę zaznaczyć tekst w powyższym przypadku?

9
shiggity 1 październik 2012, 06:18

2 odpowiedzi

Najlepsza odpowiedź

Znalazłem idealne rozwiązanie (wywołaj selectAll w następnym runloop):

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [textField performSelector:@selector(selectAll:) withObject:textField afterDelay:0.f];
}
10
flypig 23 maj 2013, 12:28

Rozwiązałem ten problem za pomocą Grand Central Dispatch. Możesz zawinąć [textField selectAll:self]; z wywołaniem dispatch_async i dispatch_get_main_queue() jako pierwszy parametr.

    dispatch_async(dispatch_get_main_queue()){
        // ... code you want to run on the main queue goes here
    }
2
Shain Lafazan 2 styczeń 2016, 06:06