将TextField添加到UIAlertView

我需要添加一个TextField到一个UIAlertView 。 我明白,苹果劝阻这种做法。 那么是否有任何库可以用来将TextField添加到UIAlertView外观相似的框架中?

对于iOS5:

 UIAlertView *av = [[UIAlertView alloc]initWithTitle:@"Title" message:@"Please enter someth" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil]; av.alertViewStyle = UIAlertViewStylePlainTextInput; [av textFieldAtIndex:0].delegate = self; [av show]; 

此外,您将需要实现UITextFieldDelegateUIAlertViewDelegate协议。

不幸的是,唯一的官方API是iOS 5以上,它是一个名为alertViewStyle的属性,可以设置为以下参数:

 UIAlertViewStyleDefault UIAlertViewStyleSecureTextInput UIAlertViewStylePlainTextInput UIAlertViewStyleLoginAndPasswordInput 

UIAlertViewStylePlainTextInput是你想要的。

如上所述的视图层次结构受到苹果公司的强烈阻碍。

我使用BlockAlertsAndActionSheets,而不是AppleView组件和ActionSheets,因为我更喜欢使用blocks-approach。 在源代码中还包含一个BlockTextPromptAlertView ,这可能是你想要的。 您可以replace该控件的图像以获得苹果风格。

在gitgub项目

教程,让你开始

例:

 - (IBAction)newFolder:(id)sender { id selfDelegate = self; UITextField *textField; BlockTextPromptAlertView *alert = [BlockTextPromptAlertView promptWithTitle :@"New Folder" message :@"Please enter the name of the new folder!" textField :&textField]; [alert setCancelButtonWithTitle:@"Cancel" block:nil]; [alert addButtonWithTitle:@"Okay" block:^{ [selfDelegate createFolder:textField.text]; }]; [alert show]; } - (void)createFolder:(NSString*)folderName { // do stuff } 

尝试这样的事情:

 UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Title" message:@"\n\n" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Save", nil] autorelease]; CGRect rect = {12, 60, 260, 25}; UITextField *dirField = [[[UITextField alloc] initWithFrame:rect] autorelease]; dirField.backgroundColor = [UIColor whiteColor]; [dirField becomeFirstResponder]; [alert addSubview:dirField]; [alert show]; 

你可以试试:

 UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Your title here!" message:@"this gets covered" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil]; UITextField *myTextField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)]; [myTextField setBackgroundColor:[UIColor whiteColor]]; [myAlertView addSubview:testTextField]; [myAlertView show]; [myAlertView release]; 

按照这个链接的细节。

从iOS 8开始, UIAlertView不再赞成UIAlertController ,它增加了使用以下方法添加UITextField的支持:

 - (void)addTextFieldWithConfigurationHandler:(void (^)(UITextField *textField))configurationHandler; 

看到这个答案的例子。

首先将UIAlertViewDelegate添加到ViewController.h文件中

 #import <UIKit/UIKit.h> @interface UIViewController : UITableViewController<UIAlertViewDelegate> @end 

而不是添加下面的代码你想要提醒显示,

 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Message" delegate:self cancelButtonTitle:@"Done" otherButtonTitles:nil]; alert.alertViewStyle = UIAlertViewStylePlainTextInput; [alert show]; 

它是返回UItextField的input的委托方法

 -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { NSLog(@"%@", [alertView textFieldAtIndex:0].text); } 

从“Shmidt”添加回答,捕获在UIAlertView中input的文本的代码被粘贴在下面(谢谢Wayne Hartman' 从UIAlertView中获取文本 )

 - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (buttonIndex == 1) { self.userNumber = [alertView textFieldAtIndex:0].text; if (self.userNumber) { // user enetered value NSLog(@"self.userNumber: %@",self.userNumber); } else { NSLog(@"null"); } } } 

请参考http://iosdevelopertips.com/undocumented/alert-with-textfields.html 这是私人API,如果你在appstore中使用它的应用程序可能会被拒绝,但它对企业发展很好。