2012-01-24 66 views
14

我正在使用UIAlertView的新iOS 5功能之一。我創建了一個UIAlertView中是這樣的:UIAlertViewStylePlainTextInput返回鍵代理

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]; 

我現在用的代表是:

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

現在我要模擬的輸入鍵,所以當用戶點擊鍵盤上回同樣的事情發生當按下警報的OK按鈕時。我怎樣才能做到這一點?

在此先感謝!

回答

29

確保你的類符合<UITextFieldDelegate>協議,使UIAlertView一個屬性類和下面的行添加到您的初始化代碼...

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]; 

通過成爲輸入文本字段的委託您可以瞭解何時按下鍵盤上的返回鍵。然後在你的類.m文件你實現委託方法如下,並告訴警報消失:

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

謝謝...編程一個每天15小時確實做出明顯的事情忘了;-) – CyberK

+0

@jackslash你能如果'UIAlertView'不是屬性,則在'textFieldShouldReturn:'方法中關閉父'UIAlertView'? (除了升級superview層次?) – zekel

+0

@jackslash另外,你應該使用'self.scanCode.firstOtherButtonIndex'而不是'0'。並確保'UIAlertView'屬性是一個弱引用,否則在消失後它會在內存中。 – zekel