iKinds是本猫近期准备慢慢把玩的一个项目,项目不是完全从0开始,而是借助于另一个不错的App框架,不过原来的框架使用的都是同一个ViewController模板,现在因为需要扩展为多个不同的VC模板.

原来的框架使用了一些layer的3D动画效果,这对单VC模板工作的很好,现在要改为多VC模板,因为不确定工程量到底有多大所以我觉得有必要先写一些小段代码来测试一些可行性.这就是我们所谓的:原型!

首先在Main.storyboard在添加一个新的UIViewController对象,将其Identity属性窗口中的Storyboard ID设置为:AddKsVC,然后稍微为它打扮一下:

注意因为原来的VC外面套了层导航控制器,所以这里我们如法炮制.增加导航控制器的原因是需要在每个VC导航栏添加一些功能按钮.

在Xcode中新建一个AddKsViewController类,继承与UIViewController.马上将刚刚在IB中创建的UIViewController对象的类改为AddKsViewController类.

现在一个测试用的模板VC已经初步建立好了,下面我们就要写些代码来加载它.

在ContainerViewController的init方法中添加如下两行:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
addKsVC = storyboard.instantiateViewController(withIdentifier: "AddKsVC")

由于原来的centerViewController属性用来存放当前右边的VC,我之前已经说过原来框架是单VC模式,所以该属性从来都不会变化,但是现在新的App需要多VC模式,那么centerViewController属性的意义也就变为保存当前显示的VC!

这还不够,我们还需要将addKsVC控制器加载到ContainerVC中,以下代码添加到viewDidLoad中:

addChildViewController(addKsVC)
view.addSubview(addKsVC.view)
addKsVC.view.isHidden = true
addKsVC.didMove(toParentViewController: self)

测试需要我们还得再添加2个属性:

let orgCenterVC:UIViewController!
let addKsVC:UIViewController!

前一个属性用来保存原有的VC,后一个用来引用新添加的VC.

好了,我前面提到因为是快速测试原型,所以难免会写一些”丑陋”的代码,不过好消息是,很快我就会重构它们,让其变得漂漂哒 ;)

打开SideMenuViewController.swift,原来的tableView(_,didSelectRowAt)方法内容如下:

override func tableView(_ tableView:UITableView, didSelectRowAt indexPath:IndexPath) {tableView.deselectRow(at: indexPath, animated:true)centerViewController.menuItem = MenuItem.sharedItems[(indexPath as NSIndexPath).row]let containerVC = parent as! ContainerViewControllercontainerVC.toggleSideMenu()}

因为整个App界面分为2部分,左边是菜单栏,包含几个菜单项;右边是每个菜单项对应的内容VC,之前所有菜单项对应的都是相同的内容VC,现在为了测试,我先将第2个菜单项对应的VC换掉:

if indexPath.row == 1{containerVC.addKsVC.view.frame = containerVC.centerViewController.view.framecontainerVC.centerViewController.view.isHidden = truecontainerVC.centerViewController = containerVC.addKsVCcontainerVC.addKsVC.view.isHidden = false}else{containerVC.centerViewController.view.isHidden = truecontainerVC.centerViewController = containerVC.orgCenterVCcontainerVC.orgCenterVC.view.isHidden = false}

运行App可以发现当选择第二个菜单项时,右侧的内容VC已经被我们新加的addKsVC很好的代替了 ;) ,而其他的菜单项选择的还是原来的VC.

经过快速开发原型,我们得以验证我们的功能可以实现,虽然目前只有一个新的VC,但是可以很容易的扩展到多个VC上!所以下面我要做的就是:

重构!重构!重构!

(重要的话说3遍)

iKinds:我是如何一步步重构改造项目从单VC到多VC界面(上)相关推荐

  1. 信息增益有负值吗_一个自动化设备的信息化改造项目,谈谈自动化工程师转型之路—IT融合OT...

    01 项目简介 项目名称:XX汽车厂设备联网改造项目实施人员:控制工程师1人,调试工程师1人 项目简介: 该汽车厂进行扩能改造,新购买了部分设备,并对一些旧设备进行功能改造,我曾经的公司为其提供部分设 ...

  2. 使用 Vue3 重构 Vue2 项目(长文)

    前言 2020年9月18日,vue3正式版发布了,前几天把文档整体读了一遍,感触很深,可以解决我项目中的一些痛点,于是就决定重构之前那个vue2的开源项目. 本篇文章就记录下重构vue2项目的过程,欢 ...

  3. 国密加密算法 java 开源_Hyperledger Fabric 国密改造项目介绍

    引言 密码学是区块链实施中最重要的组成部分之一.然而,每个国家都有自己的国家加密算法,因此,在实施联盟链方案時支持国密算法尤其重要.Hyperledger Fabric在包括中国在内的世界范围内得到广 ...

  4. Java开发环境的搭建以及使用eclipse从头一步步创建java项目

    原文:出自本人的Linux博客http://blog.csdn.net/unix21/article/details/18813173 一.Java 开发环境的搭建 这里主要说windows环境下怎么 ...

  5. 郎凤娥谈定西实施煤粉锅炉改造项目

    山西蓝天集团董事长郎凤娥介绍,定西市安定区渭源街热源厂工程占地面积19700平米, 在热源厂用地范围内建设锅炉间及附属设施用房.风机用房.除尘脱硫设备.煤粉储罐.灰渣储罐等建(构)筑物,另外,还将建设 ...

  6. SQL注入—我是如何一步步攻破一家互联网公司的

    最近在研究Web安全相关的知识,特别是SQL注入类的相关知识.接触了一些与SQL注入相关的工具.周末在家闲着无聊,想把平时学的东东结合起来攻击一下身边某个小伙伴去的公司,看看能不能得逞.不试不知道,一 ...

  7. 某大型数据中心离心式冷水机组 控制板UPS电源改造项目案例分享

    摘  要  离心式冷水机组作为大部分数据中心的核心设备,其是否稳定.安全运行决定着数据中心制冷系统的安全运行.本文分析了某大型数据中心离心式冷水机组控制板UPS电源改造创新案例,分析了改造项目过程中可 ...

  8. wincc无法修改服务器名称_WinCC(TIA)组件SIVARC在BA空调及冷热源系统改造项目中的应用...

    中文摘要:本文将着重论述 TIAWinCC SiVarc(画面生成器)在BA系统改造中的应用,并详细展示如何通过SiVar画面.变量等规则建立WinCC(TIA)画面与程序的关联,实现WinCC变量. ...

  9. 技术面试问项目难题如何解决的_【知识】同轴线如何当quot;网线quot;使用?解决改造项目中难题...

    新朋友请 点上方蓝字"中博智能"免费关注 很多的项目原先是用的同轴线,但是随着网络发展,不得不改造使用网线了,但很多早期的项目之前是没有放网线的,由于减少改造的难度与成本问题,因此 ...

最新文章

  1. Linux Kernel TCP/IP Stack — L4 Layer
  2. python写一个系统-使用Python写一个量化股票提醒系统
  3. java enum判断_Java Enum枚举 遍历判断 四种方式(包括 Lambda 表达式过滤)
  4. (转)DevExpress 汉化(简单、实用、快速)
  5. 若依的框架怎么样_若依框架的功能代码
  6. centos下设置自启动和配置环境变量的方法
  7. 定制自己的ubuntu 镜像文件 (remastersys, respin, USB live CD)
  8. 计算机组成原理-复习题2
  9. 奖学金——信息学奥赛一本通1179题解
  10. 各种插件、扩展、工具网站
  11. 女人长点心就收藏它肯定会用到的
  12. 上小学的划片政策(by quqi99)
  13. android备忘录的开发总结报告,android备忘录
  14. 苹果手机怎么扩大内存_怎样扩大手机内存
  15. 浅谈嵌入式系统的应用场景
  16. 解决AndroidStudio编译时报错:org.gradle.api.ProjectConfigurationException;编译报错Read Time out
  17. springboot实现无数据库启动
  18. Java工程中的综合排序算法选取
  19. 异地就医联网进展如何?正式签约定点医疗机构已达数百家
  20. 以岭药业:连花清瘟火爆背后,数字化重塑人力资源管理

热门文章

  1. 怎样用好CorelDRAW中的位图颜色遮罩
  2. 成长中的SEO,应该避免这12个过时的优化策略(转载自:https://www.duiji.net)
  3. 基于Python的招聘推荐与薪资预测系统的设计与实现
  4. 由numpy.arange函数看双精度浮点数的精度问题
  5. 小米usb测试软件,你还在用USB传文件?小米10系列USB详细测试——《小米10十大槽点》番外 图文版...
  6. Windows10家庭版 VMWare15 安装虚拟机启动时出现 蓝屏(而且重启)问题
  7. PS制作一寸照片具体过程
  8. 【转载】R语言dplyr包学习笔记(吐血整理宇宙无敌详细版)
  9. C#中如何使用Chart图表
  10. 关于微软无线鼠标适配的问题