在UIToolBar上使用Done按钮关闭UIPickerView

我只是尝试在解雇UIPickerView方面做得更好 – 导航栏上的按钮或选择器视图上方工具栏上的“完成”按钮。 我已经实现了两个按钮,我试图解除选择器视图并辞职第一响应者。

如何使用工具栏上的“完成”按钮关闭UIPickerView

这是我的UIToolBar代码:

 UIToolbar* keyboardDoneButtonView = [[UIToolbar alloc] init]; keyboardDoneButtonView.barStyle = UIBarStyleBlack; keyboardDoneButtonView.translucent = YES; keyboardDoneButtonView.tintColor = nil; [keyboardDoneButtonView sizeToFit]; UIBarButtonItem* doneButton = [[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(pickerDoneClicked:)] autorelease]; [keyboardDoneButtonView setItems:[NSArray arrayWithObjects:doneButton, nil]]; textField.inputAccessoryView = keyboardDoneButtonView; 

有人可以帮我吗?

虽然我确信我的测试应用程序比较简单,但我希望这个结构对您来说仍然适用。

从本质上讲,这就是我所做的一切。 我在IB中设置了UIPickerViewUIDatePickerViewUITextField 。 pickerView的dataSourcedelegate都链接到File的Owner,textField的delegate也是如此。

在我的标题中,我使用以下结构声明它们

 UISomething *object; @property (nonatomic, retain) IBOutlet UISomething *object; 

我还连接了协议( )。 在实现文件中,所有内容都是合成的。 然后在viewDidLoad ,我有这个。

 - (void)viewDidLoad { UIToolbar* keyboardDoneButtonView = [[UIToolbar alloc] init]; keyboardDoneButtonView.barStyle = UIBarStyleBlack; keyboardDoneButtonView.translucent = YES; keyboardDoneButtonView.tintColor = nil; [keyboardDoneButtonView sizeToFit]; UIBarButtonItem* doneButton = [[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(pickerDoneClicked:)] autorelease]; [keyboardDoneButtonView setItems:[NSArray arrayWithObjects:doneButton, nil]]; textField.inputAccessoryView = keyboardDoneButtonView; [datePicker removeFromSuperview]; [pickerView removeFromSuperview]; [super viewDidLoad]; } 

当textField变为活动状态时,我会调用它

 - (void)textFieldDidBeginEditing:(UITextField *)textField { [self.view addSubview:pickerView]; [self.view addSubview:datePicker]; } 

最后,还有动作方法

 - (IBAction)pickerDoneClicked:(id)sender { [datePicker removeFromSuperview]; [pickerView removeFromSuperview]; [textField resignFirstResponder]; } 

这一切都适合我。 一切都得到了显示和删除。 所以运气好的话,这对你也有用

 -(void)pickerDoneClicked:(id)sender { [pickerView removeFromSuperview]; } 

或者,如果要使用动画将其关闭,请使用UIView动画更改视图框,然后将其从superview中删除。

 [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.5]; [UIView setAnimationDelay:1.0]; [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; pickerView.frame = outOfScreenFrame; [UIView commitAnimations]; 

其中outOfScreenFrame位于UIApplication窗口之外的某个位置。

在斯威夫特

 lazy var inputToolbar: UIToolbar = { var toolbar = UIToolbar() toolbar.barStyle = .Default toolbar.translucent = true toolbar.sizeToFit() var doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Bordered, target: self, action: "inputToolbarDonePressed") var spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) toolbar.setItems([spaceButton, doneButton], animated: false) toolbar.userInteractionEnabled = true return toolbar }() func inputToolbarDonePressed() { view.endEditing(true) } 

UITextFieldDelegate

 func textFieldShouldBeginEditing(textField: UITextField) -> Bool { textField.inputAccessoryView = inputToolbar return true }