本篇博客就来介绍一下iOS App中主题切换的常规做法,当然本篇博客中只是提到了一种主题切换的方法,当然还有其他方法,在此就不做过多赘述了。本篇博客中所涉及的Demo完全使用Swift3.0编写完成,并使用iOS的NSNotification来触发主题切换的动作。本篇博客我们先对我们的主题系统进行设计,然后给出具体实现方式。当然在我们设计本篇博客所涉及的Demo时,我们要遵循“高内聚,低耦合”,“面向接口编程”,“便于维护与扩充”等特点。
本篇博客我们先看一下Demo的运行效果,然后给出设计方案已经对应的类图,然后再根据设计的类图给出相应的代码实现。
一、主题切换效果展示
先入为主,接下来我们先看一下本篇博客所涉及Demo的最终运行效果。为了看到整体主题切换的效果,所以我们添加了一个主页以及主页Push进去的子页面。另一个页面就是选择相应主题的页面,也就是下方你所看到的TabieView的列表页,该列表中提供了6种可选的主题,点击相应的主题即可切换到该主题上。
当然主题切换,意味着整个App的风格都得改变,所以当修改完主题后,主页以及其子页面的主题也得随之改变。具体效果如下gif图所示。当然Demo比较简单,但是麻雀虽小,五脏俱全,用来了解App的主题切换足以。当然有更好的实现方式,欢迎留言交流。

二、设计主题切换功能的整体结构
看完效果后,接下来我们就进入了设计阶段。根据上述Demo的特点,我们先给出相应的类图,当然我们敲代码时要根据该类图进行实现。下方截图就是我们本篇博客主题切换工程的类图了。该类图中省略了一些细节,给出了核心的内容。接下来我们来详细的看一下下方这个类图的结构,如果下方的类图搞明白了,那么在下部分中看相应代码时,就会显得游刃有余了,因为我们的代码是按照下方的类图所实现的。只不过比下方类图更为详细。
接下来我们就来看一下类图的结构,我们就按照不同颜色的框逐一介绍,框中的内容算是一个模块。
红色框:下方类图红色框中就是我们的主题协议ThemeProtocol以及遵循该协议的所有主题。当然,依据“面向接口”编程的规则,外部所依赖的不是所有的主题类,而是主题协议ThemeProtocol。也就是ThemeManager类依赖于ThemeProtocol。而所有的主题类通过工厂类或者工厂方法间接的与ThemeManager。因为鉴于Swift中的枚举中可以添加相应的计算属性以及方法,所以我们可以使用相应的主题枚举来充当这个工厂类,当然下方类图中没有给出,这个要看具体的代码实现。










