我正在XCode 7.3中编写一个简单的iOS应用程序,我相信我会使用Swift 2.2。我正在尝试使用带有UIText字段的UIToolbar的UIDatePicker,出于某种原因,我点击“取消”按钮似乎不会在控制器上调用方法datePickerCancelled。一切都很好(选择器,按钮等),但事件不会触发。我已经尝试了将选择器添加到UIBarButtonItem的几种变体,似乎没有任何效果。从代码中可以看出这是一个非常简单的案例,因此它逃脱了为什么它应该是这么困难。谢谢。
override func viewDidLoad() {
super.viewDidLoad()
var datePicker = UIDatePicker()
var datePickerToolbar = UIToolbar()
let doneButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: nil, action: nil)
let cancelButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Cancel, target: self, action: #selector(datePickerCancelled))
let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
datePickerToolbar.setItems([cancelButton,flexSpace, doneButton], animated: true)
datePicker.userInteractionEnabled = true
cancelButton.enabled = true
self.dateField.inputView = datePicker
self.dateField.inputAccessoryView = datePickerToolbar
}
func datePickerCancelled(){
self.datePicker.resignFirstResponder();
}` I
答案 0 :(得分:0)
问题在于这一行:
var datePickerToolbar = UIToolbar()
这会产生零大小的工具栏。 “取消”按钮是可见的,但它位于超级视图之外,即工具栏 - 因为工具栏的大小为零。
无法点击其超级视图之外的视图。
您可以通过将工具栏的clipsToBounds
设置为true
并运行该应用来轻松确认。 “取消”按钮现在将不可见,因为工具栏外部的内容不再显示。
如果事件发生了,那么您的datePickerCancelled
功能仍然不会 :
func datePickerCancelled(){
self.datePicker.resignFirstResponder();
}
您的日期选择器从来都不是第一响应者,因此该行不会导致任何事情发生。
也许你的意思是:
func datePickerCancelled(){
self.dateField.resignFirstResponder();
}