使 UIPickerView 的自定义 class 能够在 Swift 中发送事件

Make a custom class of UIPickerView able to send events in Swift

我已经根据 UIPickerView 编写了自定义 class。在 class 中,我实现了下一个方法:

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

    let min = (selectedRow(inComponent: 0) % minutes.count)
    let sec = (selectedRow(inComponent: 1) % seconds.count)

    self.min = min
    self.sec = sec

    }

每次用户使用选择器视图从 "min" 和 "sec" 中选择值时,这些 class 变量会相应更改。所以,它工作正常。

现在,我希望 class 每次更改这些变量时都发送事件。是否可以为此 class 采用 valueChanged 事件,以及如何实现它,或者我必须为此目的制作自定义事件?我想以这种方式进行,以便能够通过 IB 进行行动。如果我错过了模式,请纠正我。

也许我可以换句话说这个问题:是什么让内置 UIDataPicker 能够连接到具有操作插座的界面生成器中的视图控制器 - 我应该向我的自定义添加什么 class 部分实现该功能?

Apple 声明:“UIDatePicker class 使用 UIPickerView 的自定义子 class 来显示日期和时间。”如果我错了,请在这里纠正我,但他们还指出 UIDatePicker 继承自 UIControl 而不是 UIPickerView。至于 UIPickerView - 他们说它继承自 UIView。因此,我认为 UIControlUIPickerViewUIDatePicker 的继承没有任何联系。另外由于UIViewclass的多重继承,我无法继承UIControl来获取事件发送功能。无法理解为什么这里的事情如此奇怪,我不能为 UIPickerView.

使用 UIControl 功能
  1. 创建 YourCustomControl 继承自 UIControl
  2. 添加子视图UIPickerView
  3. YourCustomControl设置为该选择器的代表

要发送事件,您需要添加此行

sendActions(for: .valueChanged)

在这些变量被改变的每个地方

UIKit - sendActions