-
Notifications
You must be signed in to change notification settings - Fork 1.4k
2.1.0 重构 QMUIMoreOperationController 须知
MoLice edited this page Dec 4, 2017
·
1 revision
QMUI iOS 2.1.0 版本里我们重构了 QMUIMoreOperationController
,由于改动较大,在此将重构思路及新版本适配方法一一列出。
之前 QMUIMoreOperationController
存在的问题主要有:
- 最多只支持 2 行(Important 和 Normal)。
- 每一行显示的列数根据不同屏幕写死而不是动态计算,因此无法得到一个最优布局结果。
- 由
QMUIMoreOperationController
负责创建 item,而不是 item 自己管理自己,导致QMUIMoreOperationController
代码较为冗杂。 - 支持以
hidden
的方式临时将某个 item 隐藏起来,但该 item 又存在于 view 层级和数据里,这种不匹配加重了控件的复杂度。 - 事件响应依然使用 delegate,与
QMUIAlertController
、QMUIDialogViewController
等其他使用 block 风格的 QMUI 控件不一致。
基于以上问题,本次 QMUI 版本重构了这个控件,新控件相比旧控件的改动有:
- 通过
items
属性来设置 item,支持不定行数的 item。 - 动态计算每一行的 item 个数以及 item 与 item 之间的间距,使得业务可以较为自由地控制 item 的布局效果。
- 由
QMUIMoreOperationItemView
自己负责创建 item 并管理自己的内容,使代码划分更清晰,风格与QMUIAlertAction
一致。 - 去除 hidden 的操作,使用 remove 代替即可。
- 将事件从 delegate 改为 block 风格,与 QMUI 其他控件保持一致。
如果你从 2.1.0 以前的版本升级上来,那么你需要做的修改是:
- 搜索
[QMUIMoreOperationController addItemWithTitle:
系列方法,将其删除。 - 将第 1 步里的 item 改为用
[QMUIMoreOperationItemView itemViewWithImage:]
系列方法创建。 - 如果 item 的点击事件响应较为独立,建议将原本写在
[QMUIMoreOperationControllerDelegate moreOperationController: didSelectItemAtIndex:]
里的事件迁移到第 2 步 init 方法的handler
参数里(也可以不迁移,依然使用 delegate 管理点击事件)。 - 通过
items
属性一次性把所有 item 添加进去,或者通过新增的addItemView:
、insertItemView
、removeItemView
系列方法来操作 item 的增删。 - 如果原本有使用
setItemHidden:
方法临时将 item 隐藏,则新版里应该将隐藏操作改为移除操作,现不提供隐藏 item 的概念。 - 全局搜索
QMUIMoreOperationControllerDelegate
里的两个方法:moreOperationController:didSelectItemAtIndex:type:
、moreOperationController:didSelectItemAtTag:
,将其改为moreOperationController:didSelectItemView:
,或者考虑移除它们,换成用handler
的方式组织事件响应代码。 - 将
contentSeparatorColor
重命名为scrollViewSeparatorColor
。 - 将
topScrollViewInsets
、bottomScrollViewInsets
替换为scrollViewContentInsets
。 - 增加
contentPaddings
用于控制面板内部的间距。 - 增加
itemMinimumMarginHorizontal
用于保护 item 之间的间距不要小于某个值。