如何在selectUITextField时显示UIPickerView

以下是截至目前为止我所做的一个截图:

在这里输入图像说明

所以我想要做的是当你select“select一个名字”Textfield我需要一个Picker来显示,input@“Jack”。

它会为你工作..我已经编辑它。因此,你必须设置文本字段的委托。 并在NIb文件中创build一个UIPIckrView。

- (BOOL) textFieldShouldBeginEditing:(UITextView *)textView { pickrView.frame = CGRectMake(0, 500, pickrView.frame.size.width, pickrView.frame.size.height); [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:.50]; [UIView setAnimationDelegate:self]; pickrView.frame = CGRectMake(0, 200, pickrView.frame.size.width, pickrView.frame.size.height); [self.view addSubview:pickrView]; [UIView commitAnimations]; return NO; } 

从iOS 3.2开始, UITextField支持inputView属性来分配一个用作键盘的自定义视图,它提供了一种显示UIPickerView

您可以使用UITextFieldinputView属性,可能与inputAccessoryView属性结合使用。 您将pickerView分配给inputView属性,并closures拾取器,为inputAccessoryView属性完成一个button。

 UIPickerView *myPickerView = [[UIPickerView alloc] init]; //myPickerView configuration here... myTextField.inputView = myPickerView; 

像那样。 这不会给你一个直接的方法来解除视图,因为你的UIPickerView没有返回button,这就是为什么我build议使用inputAccessoryView属性来显示一个完成button的工具栏(酒吧只是为了美观,你也可以只需使用一个UIButton对象):

 UIToolbar *myToolbar = [[UIToolbar alloc] initWithFrame: CGRectMake(0,0, 320, 44)]; //should code with variables to support view resizing UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(inputAccessoryViewDidFinish)]; //using default text field delegate method here, here you could call //myTextField.resignFirstResponder to dismiss the views [myToolbar setItems:[NSArray arrayWithObject: doneButton] animated:NO]; myTextField.inputAccessoryView = myToolbar; 

我使用这个,发现这比添加子视图和UIPickeranimation更清洁

 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { responder = textField; if ([textField isEqual:self.txtBirthday]) { UIDatePicker *datepicker = [[UIDatePicker alloc] initWithFrame:CGRectZero]; [datepicker setDatePickerMode:UIDatePickerModeDate]; textField.inputView = datepicker; } return YES; } 

那么,你可以依靠UITextFieldDelegate来处理这种function。

在 – 的里面

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField

是您将设置当前UITextField的文本以及初始化和显示UIPickerView

重要的提醒:

您可能也想要符合UIPickerViewDelegate

HTH

你可以做的是,在UITextField上创build一个带有自定义types的UIButton 。 两者都有相同的尺寸。 按一下button,你可以显示UIPickerView

http://tmblr.co/ZjkSZteCOUBS

我有我的博客中的代码和所有内容来完成这个工作。 但是下面,我有了基本的概念。

基本上解决scheme涉及一个名为ActionSheetPicker的github上的开源项目,并在UITextFieldDelegate上实现函数textFieldShouldBeginEditing 。 您可以closures键盘,并提供一个UIPickerView。 基本代码在这里列出:

 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { // We are now showing the UIPickerViewer instead // Close the keypad if it is showing [self.superview endEditing:YES]; // Function to show the picker view [self showPickerViewer :array :pickerTitle]; // Return no so that no cursor is shown in the text box return NO; } 

ViewController.h

 @interface ChangeCurrencyVC : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate> { NSArray *availableCurreniesArray; } @property (weak, nonatomic) IBOutlet UITextField *chooseCurrencyTxtFldRef; 

ViewController.m

  - (void)viewDidLoad { [super viewDidLoad]; availableCurreniesArray = @[@"Indian Rupee", @"US Dollar", @"European Union Euro", @"Canadian Dollar", @"Australian Dollar", @"Singapore Dollar", @"British Pound", @"Japanese Yen"]; // Do any additional setup after loading the view. [self pickerview:self]; } #pragma mark - picker view Custom Method -(void)pickerview:(id)sender{ UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)]; pickerView.showsSelectionIndicator = YES; pickerView.dataSource = self; pickerView.delegate = self; // set change the inputView (default is keyboard) to UIPickerView self.chooseCurrencyTxtFldRef.inputView = pickerView; // add a toolbar with Cancel & Done button UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; toolBar.barStyle = UIBarStyleBlackOpaque; UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneTouched:)]; UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelTouched:)]; // the middle button is to make the Done button align to right [toolBar setItems:[NSArray arrayWithObjects:cancelButton, [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], doneButton, nil]]; self.chooseCurrencyTxtFldRef.inputAccessoryView = toolBar; } #pragma mark - doneTouched - (void)cancelTouched:(UIBarButtonItem *)sender{ // hide the picker view [self.chooseCurrencyTxtFldRef resignFirstResponder]; } #pragma mark - doneTouched - (void)doneTouched:(UIBarButtonItem *)sender{ // hide the picker view [self.chooseCurrencyTxtFldRef resignFirstResponder]; // perform some action } #pragma mark - The Picker Challenge - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 1; } -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ return [availableCurreniesArray count]; } - (nullable NSString *)pickerView:(UIPickerView *)pickerView titleForRow: (NSInteger)row forComponent:(NSInteger)component{ return availableCurreniesArray[row]; } - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { self.chooseCurrencyTxtFldRef.text = availableCurreniesArray[row]; } 

迅速:

 internal var textFieldHandlerToolBar: UIToolbar = { let tb = UIToolbar.init(frame: CGRect.init(origin: .zero, size: CGSize.init(width: UIScreen.main.bounds.width, height: 44.0))) let doneBarButton = UIBarButtonItem.init(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: #selector(actionDonePickerSelection)) tb.setItems([doneBarButton], animated: false) return tb }() internal var pickerView: UIPickerView = { let pv = UIPickerView.init() return pv }() @objc internal func actionDonePickerSelection() { textField.resignFirstResponder() } override func viewDidLoad() { super.viewDidLoad() self.pickerView.delegate = self self.pickerView.datasource = self } 

像这样使用它:

 textField.inputAccessoryView = self.textFieldHandlerToolBar textField.inputView = self.pickerView