无法将UITextField添加到iOS7上的UIAlertView …在iOS 6中可用

下面的代码工作在iOS6(和之前),但UITextField不显示在iOS7 …任何想法如何让UITextField显示在UIAlterView在iOS7?

UIAlertView* dialog = [[UIAlertView alloc] init]; [dialog setDelegate:self]; [dialog setTitle:@"Enter ESC Score"]; [dialog setMessage:@" "]; [dialog addButtonWithTitle:@"Cancel"]; [dialog addButtonWithTitle:@"OK"]; dialog.tag = 5; nameField = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)]; [nameField setKeyboardType:UIKeyboardTypeNumberPad]; [nameField becomeFirstResponder]; [nameField setBackgroundColor:[UIColor whiteColor]]; [dialog addSubview:nameField]; CGAffineTransform moveUp = CGAffineTransformMakeTranslation(0.0, 0.0); [dialog setTransform: moveUp]; [dialog show]; [dialog release]; [nameField release]; 

运行iOS6的代码显示如下:

在这里输入图像说明

在iOS7中相同的代码显示这(注意如何UITextField丢失,没有键盘):

在这里输入图像说明

您不能轻易改变iOS 7中UIAlertView的视图层次结构(您也不应该;文档明确告诉您不要这样做。)请前往开发人员论坛,查看关于它的长篇讨论。

你的情况的一个替代方法是设置alert.alertViewStyle = UIAlertViewStylePlainTextInput; 这将为您添加一个文本字段。 您可以通过使用UITextField *textField = [alertView textFieldAtIndex:0];在UIAlertView委托callback访问它UITextField *textField = [alertView textFieldAtIndex:0];

@Aaron Brager有正确的解决scheme。 另外我在他的build议之后添加了一行以默认数字键盘。

 UIAlertView* dialog = [[UIAlertView alloc] init]; [dialog setDelegate:self]; [dialog setTitle:@"Enter ESC Score"]; [dialog setMessage:@" "]; [dialog addButtonWithTitle:@"Cancel"]; [dialog addButtonWithTitle:@"OK"]; dialog.tag = 5; dialog.alertViewStyle = UIAlertViewStylePlainTextInput; [dialog textFieldAtIndex:0].keyboardType = UIKeyboardTypeNumberPad; CGAffineTransform moveUp = CGAffineTransformMakeTranslation(0.0, 0.0); [dialog setTransform: moveUp]; [dialog show]; [dialog release]; 
 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Credit Card Number" message:@"Please enter your credit card number:" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil]; [alertView setAlertViewStyle:UIAlertViewStylePlainTextInput]; /* Display a numerical keypad for this text field */ UITextField *textField = [alertView textFieldAtIndex:0]; textField.keyboardType = UIKeyboardTypeNumberPad; [alertView show]; 

只是作为魅力工作

UIAlertView中的两个UITextField适用于所有版本的iOS

 -(IBAction) showAlertView { UIAlertView *alert; UITextField *callForwardNumber; UItextField *callForwardCondition; alert = [[UIAlertView alloc] initWithTitle:@"Enter Phone Number & Rule" message:@"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Save", nil]; //alert.transform = CGAffineTransformMakeTranslation(0, 110); callForwardNumber = [[UITextField alloc] init]; callForwardNumber.keyboardType = UIKeyboardTypeNumberPad; callForwardNumber.text = [R.prefs objectForKey:@"fwd_number"]; callForwardNumber.borderStyle = UITextBorderStyleRoundedRect; callForwardNumber.delegate = self; callForwardNumber.tag = 1; callForwardCondition = [[UITextField alloc] init]; callForwardCondition.text = callCondition; callForwardCondition.borderStyle = UITextBorderStyleRoundedRect; callForwardCondition.delegate = self; callForwardCondition.tag = 2; [callForwardCondition setKeyboardType:UIKeyboardTypeNumberPad]; if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { UIView* customAccessory = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 250, 55)]; callForwardNumber.frame = CGRectMake(0, 0, 245.0, 25.0); callForwardCondition.frame = CGRectMake(0, 30.0, 245.0, 25.0); [customAccessory addSubview:callForwardNumber]; [customAccessory addSubview:callForwardCondition]; [alert setValue:customAccessory forKey:@"accessoryView"]; [alert show]; } else { alert.message = @"\n\n\n"; [alert show]; callForwardNumber.frame = CGRectMake(20.0, 45.0, 245.0, 25.0); callForwardCondition.frame = CGRectMake(20.0, 75.0, 245.0, 25.0); [alert addSubview:callForwardNumber]; [alert addSubview:callForwardCondition]; } } 

1)在方法 – (id)initWithAlertTitle:(NSString *)标题checkForPassword:(NSString *)密码
你应该添加

 self.alertViewStyle = UIAlertViewStylePlainTextInput; 

样品:

 (id)initWithAlertTitle:(NSString *)title checkForPassword:(NSString *)password{ if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { self.alertViewStyle = UIAlertViewStylePlainTextInput; } self = [super initWithTitle:title message:@"" // password field will go here delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Enter", nil]; if (self) { self.password = password; self.hashTechnique = HashTechniqueNone; // use no hashing by default secondMessage = @"Please Enter New Password"; thirdMessage = @"Please Re-Enter Password"; secondMessageNew = @"Please Enter Password"; } NSLog(@" _password_ %@",_password); NSLog(@"_old_password_ %@",[[NSUserDefaults standardUserDefaults] objectForKey:kPassword]); return self; } 

在方法显示中添加下一步

 (void)show { if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { UITextField *passwordField = [self textFieldAtIndex:0]; passwordField.delegate = self; self.passwordField = passwordField; } else { UITextField *passwordField = [[UITextField alloc] initWithFrame:CGRectMake(14, 45, 256, 25)]; passwordField.secureTextEntry = YES; passwordField.placeholder = @""; passwordField.backgroundColor = [UIColor whiteColor]; // Pad out the left side of the view to properly inset the text UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 6, 19)]; passwordField.leftView = paddingView; passwordField.leftViewMode = UITextFieldViewModeAlways; // // Set delegate self.passwordField.delegate = self; // Set as property self.passwordField = passwordField; // Add to subview [self addSubview:_passwordField]; } // Show alert [super show]; } 

方法点击也改变

 #pragma mark - UIAlertViewDelegate - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { UITextField *passwordField = [self textFieldAtIndex:0]; self.passwordField = passwordField; } if (buttonIndex == alertView.firstOtherButtonIndex) { if ([self enteredTextIsCorrect] || [self.title isEqualToString:secondMessage] || [self.title isEqualToString:secondMessageNew]) { if (([self.title isEqualToString:secondMessage] || [self.title isEqualToString:secondMessageNew]) && (self.passwordField.text.length > 0)) { self.password = self.passwordField.text; self.title = thirdMessage; self.passwordField.text = @""; if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { if ([self.passwordDelegate respondsToSelector:@selector(notifyParent::)]) { [self.passwordDelegate notifyParent:thirdMessage:self.password]; } } }else { if ([self.title isEqualToString:thirdMessage]) { [[NSUserDefaults standardUserDefaults] setObject:self.password forKey:kPassword]; [[NSUserDefaults standardUserDefaults] synchronize]; if (self.passwordDelegate) { if ([self.passwordDelegate respondsToSelector:@selector(notifyParentWithState:)]) { [self.passwordDelegate notifyParentWithState:YES]; } } }else{ if ([self.title isEqualToString:secondMessageNew]) { self.title = secondMessageNew; } else{ self.title = secondMessage; } self.passwordField.text = @""; if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { if ([self.passwordDelegate respondsToSelector:@selector(notifyParent::)]) { [self.passwordDelegate notifyParent:self.title:self.password]; } } } } } // If incorrect then animate else { [self animateIncorrectPassword]; } } } 

你也可以看看cocoacontrols.com上的自定义控件。 看看MLAertView (ios 7就像用户界面)和TSAlertView (用户界面像ios 6)。 它们也可以转换为旋转angular度。

我也面临同样的问题,在冲浪时,我得到了答案,它为我工作。 我希望它也适合你。

 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Folder Name?" message:@"" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil]; alertView.tag = 2; alertView.alertViewStyle = UIAlertViewStylePlainTextInput; [alertView show]; - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { UITextField * alertTextField = [alertView textFieldAtIndex:0]; NSLog(@"alerttextfiled - %@",alertTextField.text); }