Unable to add UITextField to UIAlertView on iOS7…works in iOS 6

后端 未结 7 1373
梦毁少年i
梦毁少年i 2020-12-01 01:34

The code below works on iOS6 (and before) but the UITextField does not display in iOS7...any ideas on how to get a UITextField to display in an UIAlterView in iOS7?

相关标签:
7条回答
  • 2020-12-01 01:39

    @Aaron Brager had the right solution. Additionally I added a line after his suggestion to default a Numeric Keypad.

    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];
    
    0 讨论(0)
  • 2020-12-01 01:41

    You can't easily alter the view hierarchy of a UIAlertView in iOS 7. (Nor should you; the documentation specifically tells you not to.) Head over to the developer forums to see a long discussion about it.

    One alternative in your case is to set alert.alertViewStyle = UIAlertViewStylePlainTextInput; This will add a text field for you. You can access it in the UIAlertView delegate callback by using UITextField *textField = [alertView textFieldAtIndex:0];.

    0 讨论(0)
  • 2020-12-01 01:46

    1) In method - (id)initWithAlertTitle:(NSString *)title checkForPassword:(NSString *)password
    you should add

    self.alertViewStyle = UIAlertViewStylePlainTextInput;
    

    sample:

    (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;
    }
    

    in method show add next

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

    also make changes in method click

    #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];
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-01 01:53
    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];
    
    0 讨论(0)
  • 2020-12-01 01:53

    I am also facing same issue, During surfing I got the answer it work for me. I hope it also work for you.

    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);
    }
    
    0 讨论(0)
  • 2020-12-01 01:54

    Just working as charm

    Two UITextField in UIAlertView for all version of 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];
    }
    
    }
    
    0 讨论(0)
提交回复
热议问题