2012-01-24 12 views
14

Używam jednej z nowych funkcji iOS 5 dla UIAlertView. Tworzę UIAlertView tak:UIAlertViewStylePlainTextInput klucz powrotny delegata

UIAlertView *scanCode = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Some Title", @"") message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:NSLocalizedString(@"OK", @""), nil]; 
     [scanCode setAlertViewStyle:UIAlertViewStylePlainTextInput]; 
     scanCode.tag = 1234; 
     [scanCode show]; 
     [scanCode release]; 

Delegat używam teraz:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if (alertView.tag == 1234) { 
     if (buttonIndex == 1) 
     { 
      //do something 
      } 
     } 
    } 
} 

Teraz chcę symulować klawisz Enter, więc gdy użytkownik kliknie powrócić na klawiaturze to samo dzieje po naciśnięciu przycisku OK ostrzeżenia. Jak mogę to zrobić?

Z góry dziękuję!

Odpowiedz

29

Upewnij się, że klasa jest zgodna z protokołem <UITextFieldDelegate> sprawiają, że UIAlertView nieruchomości dla swojej klasy i dodać następujący wiersz do kodu instalacyjnego ...

self.scanCode = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Some Title", @"") message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:NSLocalizedString(@"OK", @""), nil]; 
[self.scanCode setAlertViewStyle:UIAlertViewStylePlainTextInput]; 
self.scanCode.tag = 1234; 
//add this... 
[[self.scanCode textFieldAtIndex:0] setDelegate:self]; 
[self.scanCode show]; 

Stając delegat na polu wprowadzania tekstu możesz dowiedzieć się, kiedy naciśnięty jest klawisz powrotu na klawiaturze. Następnie w pliku .m dla klasy zaimplementować metodę delegata poniżej i powiedz alert zniknąć:

-(BOOL)textFieldShouldReturn:(UITextField *)textField{ 
    [self.scanCode dismissWithClickedButtonIndex:self.scanCode.firstOtherButtonIndex animated:YES]; 
    return YES; 
} 
+2

Dzięki ... Programowanie 15 godzin dziennie naprawdę oczywistych rzeczy zapomnieli ;-) – CyberK

+0

@jackslash Can odrzucić rodzica 'UIAlertView' w metodzie' textFieldShouldReturn: ', jeśli' UIAlertView' nie jest właściwością? (Poza podnoszeniem hierarchii superviewów?) – zekel

+0

@ jaackslash Również powinieneś używać 'self.scanCode.firstOtherButtonIndex' zamiast' 0'. I upewnij się, że właściwość 'UIAlertView' jest słabym odniesieniem, w przeciwnym razie będzie w pamięci po jej zniknięciu. – zekel