在iOS5中,有一种新的、easy的方法可以做到这一点.我不确定这个实现是否完全完成了,因为它还没有像UITableViewCell
那样优雅,但它应该可以做到这一点,因为它现在是iOSAPI中支持的标准.为此,您不需要私有API.
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"This is an example alert!" delegate:self cancelButtonTitle:@"Hide" otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
[alert show];
[alert release];
这将呈现如下的alert 视图(屏幕截图取自XCode4.2中的iPhone 5.0模拟器):
当按下任何按钮时,将调用常规委托方法,您可以按如下方式提取textInput:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
NSLog(@"Entered: %@",[[alertView textFieldAtIndex:0] text]);
}
在这里,我只记录输入的结果.在生产代码中,您可能应该保留一个指向alert tView的指针作为全局变量,或者使用alert tView标记来判断委托函数是否由相应的UIAlertView
调用,但对于本例来说,这应该是可以的.
你应该看看UIAlertView API,你会发现还有更多的风格定义.
希望这有帮助!
--编辑--
我只是稍微玩弄一下alert tView,我想它不需要宣布完全可以根据需要编辑textField:您可以创建一个对UITextField
的引用,然后正常地(以编程方式)编辑它.
为此,我按照您在原始问题中指定的方式构建了一个alert View.迟到总比不到好,对吧:-)?
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Hello!" message:@"Please enter your name:" delegate:self cancelButtonTitle:@"Continue" otherButtonTitles:nil];
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
UITextField * alertTextField = [alert textFieldAtIndex:0];
alertTextField.keyboardType = UIKeyboardTypeNumberPad;
alertTextField.placeholder = @"Enter your name";
[alert show];
[alert release];
这将生成此alert :
您可以使用与我前面的Poster相同的委托方法来处理输入的结果.我不确定您是否能阻止UIAlertView
忽略(没有shouldDismiss
委托函数AFAIK),所以我想如果用户输入无效,您必须发布一个新的警告(或者只重新show
这个),直到输入正确的输入.
玩得开心!