在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中设置了UIPickerView
, UIDatePickerView
和UITextField
。 pickerView的dataSource
和delegate
都链接到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 }