2011-09-07 10 views
7

Mój kod:Jak dodać pole tekstowe do inputAccessoryView i uczynić TextView pierwszy responder

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    CGRect rectFake = CGRectZero; 

    UITextField *fakeField = [[UITextField alloc] initWithFrame:rectFake]; 

    [self.view addSubview:fakeField]; 

    UIView *av = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 0.0, 39.0)]; 

    av.backgroundColor = [UIColor darkGrayColor]; 

    CGRect rect = CGRectMake(200.0, 4.0, 400.0, 31.0); 

    UITextField *textField = [[UITextField alloc] initWithFrame:rect]; 

    textField.borderStyle = UITextBorderStyleRoundedRect; 

    textField.font = [UIFont systemFontOfSize:24.0]; 

    textField.delegate = self; 

    [av addSubview:textField]; 

    fakeField.inputAccessoryView = av; 

    [fakeField becomeFirstResponder]; 

} 

Próbowałem dodać

[textField becomeFirstResponder] 

na końcu, ale to robi żadnej pracy.

Kolejny problem polegający na tym, że metoda delegowania ukrywania klawiatury po naciśnięciu klawisza ENTER nie działa również.

- (BOOL) textFieldShouldReturn:(UITextField *)textField { 

    [textField resignFirstResponder]; 

    return YES; 
} 
+0

spróbować tego UIView * av = [[UIView alloc] initWithFrame: CGRectMake (0,0, 0,0, 320,0, 39,0)]; –

+0

Niestety, nie wspomniałem, że jest to na iPada i ten widok rozciąga się wzdłuż klawiatury, więc szerokość nie ma sensu. – Michael

Odpowiedz

13

Miałem do czynienia z tym samym wyzwaniem. Twoje (i moje początkowe) podejście prawdopodobnie nie działa, ponieważ pole tekstowe w inputAccessoryView nie chce zostać pierwszym responderem, ponieważ UITextField nie znajduje się początkowo na ekranie.

Moje rozwiązanie: sprawdź, kiedy pojawi się klawiatura (i widok akcesoriów)!

Krok 1) Wysłuchaj powiadomienia (upewnij się, że ten kod jest wykonywany, zanim chcesz otrzymać powiadomienie).

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(changeFirstResponder) 
              name:UIKeyboardDidShowNotification 
              object:nil]; 

Krok 2) Kiedy pojawiła się klawiatura, można ustawić pole tekstowe w inputAccessoryView aby zostać pierwszym responder:

-(void)changeFirstResponder 
{ 
    [textField becomeFirstResponder]; // will return YES; 
} 
+0

Próbuję osiągnąć to samo i twój pomysł brzmi, jakby to mogło zadziałać, ale jak powiedzieć klawiaturze, żeby pojawiła się na pierwszym miejscu? Mam UIButton, który po naciśnięciu potrzebuję klawiatury, aby pokazać z pola tekstowego w widoku akcesoriów. – Darren

+0

@Darren Znam jedno pół-brudne obejście i to ma już (ukryte) pole tekstowe w twoim bieżącym widoku i użyj akcji przycisku, aby ustawić '[yourHiddenTextField staćFirstResponder]' – Tom

+0

To jest dokładnie to, co potrzebowałem robić. Thx – Darren