gpt4 book ai didi

ios - 以编程方式连接 Storyboard w/ViewController

转载 作者:行者123 更新时间:2023-11-28 11:55:48 25 4
gpt4 key购买 nike

我一直在慢慢学习如何使用 Swift 构建 iOS 应用程序,这篇文章是由专业人士发送的:A Case For Using Storyboards on iOS .尽管我采用了学习如何以编程方式构建 iOS 应用程序的方法,但我确实相信 Storyboard在 iOS 开发中占有一席之地。我正在尝试通过为每个 View 创建一个新的 Storyboard来实现 Marin Benčević 的想法,每个 View 都有自己的 ViewController。但是,我在连接时遇到问题。我不断遇到同样的错误:

无法实例化 UIMainStoryboardFile 'LoginViewController' 的默认 View Controller - 可能未设置指定的入口点?

现在我的文件结构有点不同,因为我想将 View 与 Controller 分开,但如图所示:

file structure

登录 View Controller .swift:

class LoginViewController: UIViewController {
override func viewDidLoad() {
self.view.backgroundColor = UIColor.green
let vc = LoginViewController.instance()
self.present(vc, animated: true, completion: nil)
}

override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}

AppDelegate.swift:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
self.window = UIWindow(frame: UIScreen.main.bounds)
let loginStoryboard = LoginViewController()

self.window?.rootViewController = loginStoryboard
self.window?.makeKeyAndVisible()

return true
}

UIStoryboardExt.swift:

import UIKit

extension UIStoryboard {
func initialViewController<T: UIViewController>() -> T {
return self.instantiateInitialViewController() as! T
}
}

UIViewControllerExt.swift:

import UIKit

extension UIViewController {
class func instance() -> Self {
let storyboardName = String(describing: self)
let storyboard = UIStoryboard(name: storyboardName, bundle: nil)
return storyboard.initialViewController()
}
}

信息.plist:

主 Storyboard 文件基本名称:LoginViewController

总而言之,我想知道如何以编程方式将 UIViewController 连接到 View.storyboard 而不必使用 Storyboard的属性选项卡。我已经尝试了很多不同的方法来做到这一点,但我似乎无法弄清楚。

这是一个 StackOverflow 问题,我也尝试开始工作但无法解决:StackOverflow

编辑

连同什么Christian Abella说,我确实还需要设置 Storyboard对象的类 Class

最佳答案

这是可行的,我在我的一些项目中这样做。但您需要执行以下操作:

  1. 从 Storyboard文件中删除所有“作为初始 View Controller ”标记。
  2. 在应用程序的设置中,转到常规选项卡并从部署信息中清除主界面
  3. 在应用程序的设置中,转到信息选项卡并清除“主 Storyboard 文件基本名称”属性。

      self.window = UIWindow(frame: UIScreen.main.bounds)

    let main : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

    let loginVC = main.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController

    self.window?.rootViewController = loginVC
    self.window?.makeKeyAndVisible()

    return true

正如@Losiowaty 指出的那样,您的 viewDidLoad 将导致无限循环,因此您需要删除 LoginViewController 中的代码。

关于ios - 以编程方式连接 Storyboard w/ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51032290/

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