[英]Show custom inputView/Keyboard by tapping on UIBarButtonItem
我想在点击工具栏按钮(UIBarButtonItem)时显示自定义日期选择器键盘。
使用UIResponder
的inputView
显示自定义键盘似乎是正确的选择。 不幸的是,UIBarButtonItem不是UIResponder的子类。
我如何让UIBarButtonItem成为FirstResponder并携带一个inputView来显示这样的键盘?
当用户点击UIBarButtonItem时,为什么要显示键盘? 假设在UIBarButtonItem的水龙头上显示了键盘,那么当用户使用键盘键入内容时会发生什么? 哪个控件应该从键盘接收按键事件?
代替inputView方法,您可以按照另一种方法在单击按钮时显示datePicker
让showDatePicker
是按钮单击时调用的方法,然后
-(void)showDatePicker
{
UIDatePicker* picker = [[UIDatePicker alloc] init];
picker.autoresizingMask = UIViewAutoresizingFlexibleWidth;
picker.datePickerMode = UIDatePickerModeDate;
[picker addTarget:self action:@selector(dueDateChanged:) forControlEvents:UIControlEventValueChanged];
CGSize pickerSize = [picker sizeThatFits:CGSizeZero];
picker.frame = CGRectMake(0.0, 250, pickerSize.width, 460);
picker.backgroundColor = [UIColor blackColor];
[self.view addSubview:picker];
}
-(void) dueDateChanged:(UIDatePicker *)sender {
NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
//self.myLabel.text = [dateFormatter stringFromDate:[dueDatePickerView date]];
NSLog(@"Picked the date %@", [dateFormatter stringFromDate:[sender date]]);
}
要删除datePicker ,可以在从另一个按钮单击视图中调用的方法或自定义toolbar
完成按钮上使用removeFromSuperView
。
我已经通过创建一个UITextField完成了此任务
let myPicker = UIPickerView()
lazy var pickerInputField: UITextField = {
let field = UITextField(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
self.view.addsubview(field)
field.delegate = self
return field
}()
func barButtonItemTouched(sender: Any) {
// dismiss the picker if it's showing
if pickerInputField.isFirstResponder {
pickerInputField.resignFirstResponder()
}
pickerInputField.inputView = myPicker
pickerInputField.becomeFirstResponder()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.