gpt4 book ai didi

swift - 管理同一 View Controller 的多个实例

转载 作者:搜寻专家 更新时间:2023-11-01 07:15:11 26 4
gpt4 key购买 nike

我正在使用 UIPageViewController,它在 Storyboard中有五个 View Controller ,我为每个 View Controller 创建了一个类。一切正常,但是我希望改进我的代码,因为五个 View Controller 几乎在所有方面都是相同的(它们都包含一个 TableView ,只是它显示的信息不同)。我希望在我的页面 View Controller 中有一个 View Controller 并创建该 View Controller 的五个实例,而不必重复我的代码五次。我知道可以使用相同的 Storyboard标识符实例化多个 View Controller ,因此创建一个 View Controller 类的多个实例,但我的问题是如何管理每个实例的属性。例如,如果我需要更改表格 View 的背景颜色?先感谢您。 Main.storyboard

最佳答案

这绝对是您解决此问题的方式。

即使 Controller 之间存在一些差异,但如果大部分功能相同,那么您可以使用单个类。

您需要做的就是设置一个类级变量来标识您正在实例化的 Controller ,并使用它来控制 tableView 数据、颜色等,

开始的一种方法是使用枚举来识别您的不同情况 - 您可以将这些常量用于 segue 标识符并跟踪演示 View Controller 的每个实例

enum ViewControllerType : String
{
case controllerType1 = "Controller1"
case controllerType2 = "Controller2"
case controllerType3 = "Controller3"
case controllerType4 = "Controller4"
case controllerType5 = "Controller5"
}

然后,使用prepare(forSegue 方法

override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
switch segue.identifier!
{
case ViewControllerType.controllerType1.rawValue:
// standard definition
let presentationVC : GenericViewController = segue.destination as! GenericViewController
presentationVC.viewID = .dayView = ViewControllerType.controllerType1.rawValue
presentationVC.delegate = self
// specific to this controller
presentationVC.dataSource = dataSourceUsedForType1

case ViewControllerType.controllerType2.rawValue:
// standard definition
let presentationVC : GenericViewController = segue.destination as! GenericViewController
presentationVC.viewID = .dayView = ViewControllerType.controllerType2.rawValue
presentationVC.delegate = self
// specific to this controller
presentationVC.dataSource = dataSourceUsedForType2

// and so on for all cases ...

default:
break
}
}

现在这意味着您将实例化一个演示 View Controller ,它有一个变量 viewID,可用于对颜色等进行特定于类型的更改,并且定义了正确的数据源对于 UITableView

然后修改您的演示类以具有类似这样的东西

class GenericViewController: UIViewController
{
var viewID : String = ""

override func viewDidLoad()
{
super.viewDidLoad()

switch viewID {
case ViewControllerType.controllerType1.rawValue:
// make specific changes to the view and data source here
break
case ViewControllerType.controllerType2.rawValue:
// make specific changes to the view and data source here
break
// and so on for all cases ...
default:
// handle default behaviour
break
}
}
}

presentation view controller 中你需要做一些特定类型的事情的任何地方,只包含一个基于 viewID 的开关

关于swift - 管理同一 View Controller 的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42457440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com