UIPickerView DataSource x委托设计

时间:2016-04-18 12:55:07

标签: ios swift delegates uipickerview

我发现UIPickerViewDelegate包含需要了解其数据(标题)的方法,这确实很奇怪,或者是一个糟糕的设计决策。因为这将是其DataSource的全部目的。像这样:

pickerView(_:titleForRow:forComponent:)
pickerView(_:attributedTitleForRow:forComponent:)
pickerView(_:viewForRow:forComponent:reusingView:)

我想为PickerViewDataSource实现包含不同对象的Delegate。当然,它很容易创建一个新的委托,也许称之为PickerViewListenerDelegate。但是,随着苹果做出这一设计决定,我认为首先值得讨论。

这个奇怪的设计决定有什么意义?我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:0)

UIPickerViewDataSource协议仅解决数据源的直接属性,即每个数据源的组件数和行数。

UIPickerViewDelegate协议对演示文稿进行了处理。它提供大小,标题或视图以及选择更改的回调。

如果我们将其与UITableViewDataSourceUITableViewDelegate进行比较,则模式奇怪地完全不同。

通常,delegatedataSource都连接到同一个对象,即视图控制器,它将调用路由到底层模型并构造所需的UI元素。就个人而言,我认为将dataSource连接到数据模型,但是控制器的委托 - 做出了一个很容易打破封装的奇怪决定。

所以基本上它意味着:是的,你可以使用给定的模式在这里分离模型和表示(即格式化程序)。如果你觉得它很有用,取决于你。