将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];
此外,您将需要实现UITextFieldDelegate
, UIAlertViewDelegate
协议。
不幸的是,唯一的官方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中使用它的应用程序可能会被拒绝,但它对企业发展很好。