ios - iOS 上的自定义模板系统

标签 ios objective-c swift storyboard xib

我想为我的应用程序中的每个 viewController 使用一些不同的模板(比如 5 个,并且可以在之后增长)。

我可以想到一些不同的方法:

  1. 5 个不同的 Storyboard,每个 Storyboard都重复相同的导航。由于应用程序可能/将会更改,我放弃了此选项,因为我必须在 5 个 Storyboard中重做我在导航中所做的每项更改。
  2. 有一个 Storyboard,其中包含所有 VC 以及它们之间的导航,并且每个 VC 都有一个 containerView,我从其他 Storyboard实例化容器内的 viewController。其他 Storyboard只有没有导航的 vc,只有单独的场景。 (这里的缺点是我需要一个容器的 VC 来设置容器的内容,所以对于每个场景我都需要 1 个容器 VC,而另一个 VC 实际上是所有 vc 共享的真实代码)
  3. 具有相同的 Storyboard并为 Storyboard中的每个场景创建 5 个 xib,因此我将文件所有者设置为 Storyboard中的当前 vc,并且我添加了一个 subview ,如:

    view.addSubview(NSBundle.mainBundle().loadNibNamed(“Template1_First_Screen”, owner: self, options: nil).first! as UIView)
    

    下面可能是苹果维护得更少,可能已经过时了?这看起来至少更整洁,因为我只向当前 vc 添加一个 View

最佳答案

  1. 同意你的看法
  2. 如果 subview Controller 仅用于显示父 View Controller 中的所有内容,则不值得
  3. 这是提议中最方便的选项。它不涉及带有子 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/

相关文章:

ios - 带有 RKXMLReaderSerialization 和 XMLReader 的 RestKit 0.20-pre3

objective-c - cocoa 代码中的内存泄漏

objective-c - XCode - 查找某个类的对象的所有使用

ios - 在 UITableView 部分添加小节

ios - 使用 swift 在 iOS 上以编程方式创建热点

ios - 当从导航堆栈中弹出该 View 时,如何使后台任务完成

ios - 在两个设备之间发送时数据会被弄乱

ios - iOS7 设备上的 SKEmitter 错误

iOS keyboardWasShown、NSNotification 和 Optional 问题

ios - 由于 TIC SSL 信任错误,无法使用 Alamofire 发出请求