点击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