我发现UIPickerViewDelegate
包含需要了解其数据(标题)的方法,这确实很奇怪,或者是一个糟糕的设计决策。因为这将是其DataSource
的全部目的。像这样:
pickerView(_:titleForRow:forComponent:)
pickerView(_:attributedTitleForRow:forComponent:)
pickerView(_:viewForRow:forComponent:reusingView:)
我想为PickerView
和DataSource
实现包含不同对象的Delegate
。当然,它很容易创建一个新的委托,也许称之为PickerViewListenerDelegate
。但是,随着苹果做出这一设计决定,我认为首先值得讨论。
这个奇怪的设计决定有什么意义?我在这里错过了什么吗?
答案 0 :(得分:0)
UIPickerViewDataSource
协议仅解决数据源的直接属性,即每个数据源的组件数和行数。
UIPickerViewDelegate
协议对演示文稿进行了处理。它提供大小,标题或视图以及选择更改的回调。
如果我们将其与UITableViewDataSource
和UITableViewDelegate
进行比较,则模式奇怪地完全不同。
通常,delegate
和dataSource
都连接到同一个对象,即视图控制器,它将调用路由到底层模型并构造所需的UI元素。就个人而言,我认为将dataSource连接到数据模型,但是控制器的委托 - 做出了一个很容易打破封装的奇怪决定。
所以基本上它意味着:是的,你可以使用给定的模式在这里分离模型和表示(即格式化程序)。如果你觉得它很有用,取决于你。