我想为我的应用程序中的每个 viewController 使用一些不同的模板(比如 5 个,并且可以在之后增长)。
我可以想到一些不同的方法:
- 5 个不同的 Storyboard,每个 Storyboard都重复相同的导航。由于应用程序可能/将会更改,我放弃了此选项,因为我必须在 5 个 Storyboard中重做我在导航中所做的每项更改。
- 有一个 Storyboard,其中包含所有 VC 以及它们之间的导航,并且每个 VC 都有一个 containerView,我从其他 Storyboard实例化容器内的 viewController。其他 Storyboard只有没有导航的 vc,只有单独的场景。 (这里的缺点是我需要一个容器的 VC 来设置容器的内容,所以对于每个场景我都需要 1 个容器 VC,而另一个 VC 实际上是所有 vc 共享的真实代码)
具有相同的 Storyboard并为 Storyboard中的每个场景创建 5 个 xib,因此我将文件所有者设置为 Storyboard中的当前 vc,并且我添加了一个 subview ,如:
view.addSubview(NSBundle.mainBundle().loadNibNamed(“Template1_First_Screen”, owner: self, options: nil).first! as UIView)
下面可能是苹果维护得更少,可能已经过时了?这看起来至少更整洁,因为我只向当前 vc 添加一个 View
最佳答案
- 同意你的看法
- 如果 subview Controller 仅用于显示父 View Controller 中的所有内容,则不值得
- 这是提议中最方便的选项。它不涉及带有子 Controller 的无用层,并允许您在单个 Storyboard中保持导航
我会建议选项 4:创建不同的 xib,并且根本不涉及 Storyboard。我相信这通常会导致更简单的应用程序架构并增加更多的灵 active 。
只为导航保留 Storyboard似乎很奇怪(如果它是唯一 Storyboard的责任)。
更新
考虑proposed way初始化 view
属性选项 3 似乎并不奇怪。
class ViewController: UIViewController {
override func loadView() {
view = NSBundle.mainBundle().loadNibNamed("View", owner: self, options: nil).first! as UIView
}
}
关于这种方法的奇怪之处的最初评论是在考虑到这个选项的情况下编写的:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(NSBundle.mainBundle().loadNibNamed("View", owner: self, options: nil).first! as UIView)
}
}
关于ios - iOS 上的自定义模板系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28856166/