iOS Theme 开发续:Theme 的 Live Update

2015/3/18 23:17 下午 posted in  iOS comments

上一篇讲了Theme开发的思路,这次总结一下实时更新Theme时会遇到的问题。

先说下Live Updat的方法。很简单,只需要有Theme变化的组件订阅一个Theme变化的notificaiton,然后在收到notification后读取最新的Theme资源就行。为了简化Theme变化的代码,可以自定义控件,把Theme相关代码都封装好。之后用起来会很方便些。

其次,再说说Live Update要注意的问题:

  1. 最基础也是最主要的一点:一定要确保在主线程里修改UI相关内容。Notification的接收者在被调用的时候的线程是同发送的时候所在线程一样。即如果发送的时候不是主线程,则接收者被调用的时候不在主线程;

  2. 如果使用UIAppearance协议来修改Theme,记得改完后把View从window里移出,然后移入。因为在已经在window里的view不会立即更新。参考 Apple文档

    iOS applies appearance changes when a view enters a window, it doesn’t change the appearance of a view that’s already in a window. To change the appearance of a view that’s currently in a window, remove the view from the view hierarchy and then put it back.

  3. UITableViewCell的Theme更新不能[tableView reloadData]的方法。因为 tableView 会复用已生成的。所以cell需要自己更新Theme资源;

以上是我的一些总结,欢迎讨论拍砖