简体   繁体   English

单击带有TextField的警报时,UIPickerView更改为普通的textField

[英]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. 我有一个文本字段,说jobTextFiels,其inputView是UIPickerView,inputAccessoryView是UIToolBar。 On click of done button(in toolbar) an alert appears whose style is plainTextStyle, if row selected from picker contains text "Others". 如果从选择器中选择的行包含文本“其他”,则单击完成按钮(在工具栏中)时,会出现一个警报,其样式为plainTextStyle。 My problem is that if user selects 'others' from picker and click the add button on alert, then normal keyboard appears for jobTextField. 我的问题是,如果用户从选择器中选择“其他”并单击警报上的“添加”按钮,则为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 . 在单击完成按钮时,调用方法regisignFirstResponder I hope this will help you. 我希望这能帮到您。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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