如何在Swift中以编程方式加载UIViewController而不使用Storyboard

4

我有一个名为MyViewController的视图控制器,我想通过编程方式加载它,而不使用stroyboard或xib。

作为后续问题,我想在导航控制器中加载MyTableViewController。同样地,我需要通过编程方式完成,而不使用StoryBoard或xib。

请帮忙。

1个回答

1
我通过移除Storyboard并在AppDelegate中使用以下代码,成功解决了我的问题。
    import UIKit
    import CoreData

    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {

        var window: UIWindow?
        var navigationController: UINavigationController?

        func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
            // Override point for customization after application launch.
            self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
            // Override point for customization after application launch.
            self.window!.backgroundColor = UIColor.whiteColor()
            self.window!.makeKeyAndVisible()

            let myViewController: MyViewViewController? = MyViewViewController()
            self.navigationController = UINavigationController(rootViewController: myViewController!)
            self.window!.rootViewController = self.navigationController
            return true
        }
 ...
}

为什么要点踩?我同意这种做法很愚蠢,但这似乎是问题的正确答案。如果你想要点踩,请告诉原帖作者为什么。 - Rob
为什么要写大量的代码,当使用故事板可以让这变得更加容易呢?虽然这并没有显著提高效率,但引入了可能产生编程错误的点。苹果官方的《iOS 视图控制器编程指南》中甚至不再考虑像以前一样通过编程方式构建视图。该指南曾经有一个长篇章节,介绍如何编写 loadView 方法(不要与 viewDidLoad 混淆)来控制程序控制的视图,但现在他们显然认为没有人会再这样做了。 - Rob
1
手动在代码中创建UI是愚蠢的,有很多原因。IB背后有数千小时的测试。它创建工作的UI元素。它使本地化UI变得微不足道。它支持许多使编程更容易的功能。它使您更加高效。我认为可扩展性完全相反。在UI中创建大量自定义代码并不“可扩展”。开发速度慢、繁琐且容易出错,维护起来也是一场噩梦。 - Duncan C
2
我非常感谢你提出的观点,但我认为如果IB真的想解决开发者的问题,它应该生成一个可读性强且适用于git-diff的后备格式(可读性强的XML或可读性强的JSON)。这将使开发人员能够在IB和代码之间无缝工作,而不会导致合并问题。但据我所知,IB仍然将Xcode状态与故事板XML中的视图状态混合在一起,导致故事板的后备XML中存在无法合并的差异。因此,Google不允许iOS开发人员将故事板提交到版本控制中。 - Arunabh Das
1
问题及其答案是另一种自定义初始视图控制器实例化的有用示例,无论使用还是不使用故事板或nib。某人可能选择完全使用代码创建他们的界面,这当然有其合理的原因。 - ElmerCat
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接