作者:萱筱璧 | 来源:互联网 | 2024-12-09 13:37
在前一篇文章中,我们已经成功地验证了原型功能的可行性。本文将继续深入探讨,通过优化之前的代码结构,逐步将单一视图控制器(VC)的应用程序重构为支持多个视图控制器的版本。
在上一篇文章中,我们初步实现了应用的核心功能,并快速构建了一个可工作的原型。然而,为了提升代码质量和维护性,接下来我们将对之前快速开发过程中遗留的较为粗糙的代码进行重构。
首先,让我们回顾一下上文中提到的关键代码段:
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! ContainerViewController if indexPath.row == 1 { containerVC.addKsVC.view.frame = containerVC.centerViewController.view.frame containerVC.centerViewController.view.isHidden = true containerVC.centerViewCOntroller= containerVC.addKsVC containerVC.addKsVC.view.isHidden = false } else { containerVC.centerViewController.view.isHidden = true containerVC.centerViewCOntroller= containerVC.orgCenterVC containerVC.orgCenterVC.view.isHidden = false } containerVC.toggleSideMenu() }
上述代码中使用了if语句来区分不同情况下的处理逻辑,虽然能够满足当前需求,但长远来看并不高效。因此,我们需要对这部分逻辑进行重构,以提高代码的可读性和可维护性。
为此,我们将在ContainerViewController.swift
文件中做出一些调整。首先,注释掉与addKsVC
相关的所有旧代码。接着,我们将引入一个初始化方法,用于加载所有内容视图控制器。尽管目前只有addKsVC
需要特别初始化,但未来可能会增加更多不同的视图控制器,因此提前做好准备是必要的。
func initContentVCs() { let storyboard = UIStoryboard(name: "Main", bundle: nil) let addKsVC = storyboard.instantiateViewController(withIdentifier: "AddKsVC") addChildViewController(addKsVC) view.addSubview(addKsVC.view) addKsVC.view.isHidden = true addKsVC.didMove(toParentViewController: self) if orgCenterVC != nil { cOntentVCs= [UIViewController]() let count = MenuItem.sharedItems.count for _ in 0..
同时,不要忘记在ContainerViewController
类中声明一个新的数组属性来存储这些内容视图控制器:
var contentVCs:[UIViewController]!
并且,在类的初始化方法末尾调用initContentVCs()
方法以确保内容视图控制器被正确初始化。
下一步,我们将实现一个新方法switchContentVC(to index:Int)
,用于根据用户选择的菜单项动态切换显示的内容视图控制器:
func switchContentVC(to index:Int) { guard index >= 0 && index
至此,我们的核心逻辑已经完成。最后一步是在SideMenuViewController.swift
中更新tableView(_:didSelectRowAt:)
方法,使其能够调用新的switchContentVC(to:)
方法:
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! ContainerViewController containerVC.switchContentVC(to: indexPath.row) }
通过以上步骤,我们不仅优化了原有的代码结构,还增强了应用程序的灵活性和扩展性。希望这些改进对你有所帮助,也期待你在自己的项目中尝试类似的优化策略。