简体   繁体   中英

UIPickerView changes to normal textField when clicked on alert with TextField

I have a text Field say jobTextFiels whose inputView is UIPickerView and inputAccessoryView is a UIToolBar. On click of done button(in toolbar) an alert appears whose style is plainTextStyle, if row selected from picker contains text "Others". My problem is that if user selects 'others' from picker and click the add button on alert, then normal keyboard appears for jobTextField. I have tried each and everything ie resigning this textfield where ever possible but nothing worked for me.

-(void)viewDidLoad
{
    pickerView = [[UIPickerView alloc] init];
    pickerView.delegate = self;
    pickerView.dataSource = self;
    pickerView.showsSelectionIndicator = YES;
    pickerView.backgroundColor=[UIColor whiteColor];
    _jobTypeTxtFld.inputView = pickerView;
    _genderTxtFld.inputView = pickerView;

    UIToolbar* numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 50)];
    numberToolbar.barStyle = UIBarStyleDefault;
    numberToolbar.items = [NSArray arrayWithObjects:
                           [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithNumberPad)],
                           nil];
    [numberToolbar sizeToFit];
    _jobTypeTxtFld.inputAccessoryView = numberToolbar;
    _genderTxtFld.inputAccessoryView = numberToolbar;
}

- (void)doneWithNumberPad{

    if (_jobTypeTxtFld.isFirstResponder) {
        if ([self.jobTypeTxtFld.text isEqualToString:@"Others"])
        {
            [UITextFieldAnimation moveContainerToInitialPositionWithView:self.bgView];
            jobAlert = [[UIAlertView alloc]initWithTitle:@"Please enter your job type" message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Add",nil];
            jobAlert.alertViewStyle = UIAlertViewStylePlainTextInput;
            [jobAlert show];
        }
        else
        {
            [self.addrssTxtFld becomeFirstResponder];
        }
    }
    //[self.view endEditing:YES];
}

- (void)alertView:(UIAlertView *)alertview clickedButtonAtIndex:(NSInteger)buttonIndex
{
switch (buttonIndex)
    {
        case 0:
        {

        }
            break;

        case 1:
        {
            if (alertview == jobAlert) {
               // [_jobTypeTxtFld resignFirstResponder];
                [[jobAlert textFieldAtIndex:0] resignFirstResponder];
                if ([[jobAlert textFieldAtIndex:0].text isEqualToString:@""])
                {
                    [UITextFieldAnimation getAlertWithTitle:@"Message" andMessage:@"Please enter your job type!"];
                    [[jobAlert textFieldAtIndex:0] resignFirstResponder];
                }
                else
                {
                    self.jobTypeTxtFld.text = [jobAlert textFieldAtIndex:0].text;
                    [[jobAlert textFieldAtIndex:0] resignFirstResponder];
                }
                [_jobTypeTxtFld resignFirstResponder];
            }
        }
            break;
        default:
            break;
    }

#pragma mark
#pragma mark <UIPickerViewDataSource>
#pragma mark

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}

#pragma mark - picker delegate
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    if(_jobTypeTxtFld.isFirstResponder)
    {
        [self.jobTypeTxtFld setText:[jobTypeArr objectAtIndex:row]];

    }
    else if(_genderTxtFld.isFirstResponder)
    {
        NSArray *arr = @[@"Male",@"Female"];
        [self.genderTxtFld setText:[arr objectAtIndex:row]];
    }
}


// tell the picker how many rows are available for a given component
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

    if(_jobTypeTxtFld.isFirstResponder)
    {
        return [jobTypeArr count];

    }
    else
    {
       return 2;
    }


}

// tell the picker the title for a given component
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    if(_jobTypeTxtFld.isFirstResponder)
    {
        return [jobTypeArr objectAtIndex:row];

    }
    else
    {
        NSArray *arr = @[@"Male",@"Female"];
        return [arr objectAtIndex:row];
    }
}

// tell the picker the width of each row for a given component
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
    int sectionWidth = 300;

    return sectionWidth;
}

单击Resturant服务器

从选择器中选择“其他”并单击“完成”按钮时

单击添加alerview按钮

单击确定

在此处输入图片说明

On clicking done button call method regisignFirstResponder . I hope this will help you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM