点击textField后弹出pickerView的简单运用

昨天在做项目的时候碰到了点击textField来选择地区的功能,所以复习了下。今天在这里记录下

    _nationalityTextField = [[UITextField alloc] init];
    _nationalityTextField.tag = 1; //绑定tag
    _nationalityTextField.delegate = self; //设置代理
    _nationalityTextField.backgroundColor = [UIColor whiteColor];
    _nationalityTextField.text = _nationalityName;
    _nationalityTextField.layer.borderWidth = 0.5;
    _nationalityTextField.layer.borderColor = [UIColor colorWithRed:0.94 green:0.95 blue:0.95 alpha:1].CGColor;
    [self.view addSubview:_nationalityTextField];
    [_nationalityTextField mas_remakeConstraints:^(MASConstraintMaker *make) {
        make.centerX.equalTo(self.view.mas_centerX);
        make.top.equalTo(_nicknameTextField.mas_bottom);
        make.size.mas_equalTo(CGSizeMake(self.view.frame.size.width, self.view.frame.size.height*.08));
    }];
    UILabel *nationalityLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width*.26, self.view.frame.size.height*.05)];
    nationalityLabel.text = @"   归属国籍      ";
    _nationalityTextField.leftView = nationalityLabel;
    _nationalityTextField.leftViewMode = UITextFieldViewModeAlways;

要想实现弹出pickerView功能,当然要先设置textField的代理了,因为是在点击textField的时候触发的事件。

- (BOOL)textFieldShouldReturn:(UITextField *)textField{
    [textField resignFirstResponder];
    return YES;
}

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
    if (textField.tag == 1) {   //具体弹出方法请看这
        [self.hartNameTextField resignFirstResponder];  //这些都是退出第一响应者
        [self.nicknameTextField resignFirstResponder];
        [self.passwordTextField resignFirstResponder];
        
        [self forDetailsOnNationality]; //这里调用弹出界面
        return NO;   //这里设置textField输入框不能输入
    }else if (textField.tag == 2){
        _promptRepeatTextField.text = @"   .hart";
        _promptRepeatTextField.textColor = [UIColor colorWithRed:0.67 green:0.68 blue:0.68 alpha:1];
        _line.hidden = NO;
        _image.hidden = YES;
        
        return YES;
    }else return YES;
}

这样关于textField方面的我们就设置好了,接下来就是创建pickerView。创建的方法我就不说了,我想大家都知道,主要的还是pickerView的代理方法

#pragma PickerView Delegate
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;   // 这个方法控制的是pickerView的列数
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return _nationalityContent.count;   //这里就返回pickerView的行数
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    //返回的是每一行显示的内容,_nationalityContent是数组,我在里面放的是字典
    return [[_nationalityContent objectAtIndex:row] objectForKey:@"name"];
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ //这方法就是选中某一行,获取它的内容
    self.nationalityName = [[_nationalityContent objectAtIndex:row] objectForKey:@"name"];
    self.nationalityID = [[[self.nationalityContent objectAtIndex:row] objectForKey:@"id"] integerValue];
}

这不是全部,因为我还要在下面添加两个按钮,@“确定”跟@“取消”,就是上面说的调用弹出界面方法

#pragma 获取国籍详情
- (void)forDetailsOnNationality{
    float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (version >= 8) {  //这里比较iOS版本,但是有问题,有兴趣的可以去查查
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"\n\n\n\n\n\n\n\n\n\n\n" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
        UIAlertAction *ok = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            self.nationalityTextField.text = self.nationalityName;
        }];
        
        UIAlertAction *no = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:nil];
        [alertController.view addSubview:self.nationalityPickerView];
        [alertController addAction:ok];
        [alertController addAction:no];
        [self presentViewController:alertController animated:YES completion:nil];
    }else{
        NSLog(@"iOS版本低于8");
    }
}

上面全部完成后,效果如下图:


如果有更好的方法或者建议的话,欢迎发邮件到 1078550454@qq.com
posted @ 2016-03-04 10:45  卖身的小男孩  阅读(715)  评论(0编辑  收藏  举报