UIButtonBarItem似乎没有触发选择器

时间:2016-10-17 00:08:35

标签: ios swift swift2

我正在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

1 个答案:

答案 0 :(得分:0)

问题在于这一行:

var datePickerToolbar = UIToolbar()

这会产生零大小的工具栏。 “取消”按钮是可见的,但它位于超级视图之外,即工具栏 - 因为工具栏的大小为零。

无法点击其超级视图之外的视图。

您可以通过将工具栏的clipsToBounds设置为true并运行该应用来轻松确认。 “取消”按钮现在将不可见,因为工具栏外部的内容不再显示。

如果事件发生了,那么您的datePickerCancelled功能仍然不会

func datePickerCancelled(){
    self.datePicker.resignFirstResponder();
}

您的日期选择器从来都不是第一响应者,因此该行不会导致任何事情发生。

也许你的意思是:

func datePickerCancelled(){
    self.dateField.resignFirstResponder();
}