我一直在缓慢地学习如何使用Swift
构建iOS应用程序,而某人向他发送了这篇文章,他为何如此专业:A Case For Using Storyboards on iOS。尽管我采用了以编程方式学习如何构建iOS应用程序的方法,但我确实相信情节提要在iOS开发中占有一席之地。我正在尝试通过为每个具有自己的Marin Benčević
的视图创建一个新的故事板来实现ViewController
的想法。但是,我在连接此设备时遇到了问题。我不断遇到这个错误:
Failed to instantiate the default view controller for UIMainStoryboardFile 'LoginViewController' - perhaps the designated entry point is not set?
现在我的文件结构有所不同,因为我想使视图与控制器分离,但如下所示:
LoginViewController.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()
}
}
info.plist:
Main storyboard file base name: LoginViewController
总而言之,我想知道如何以编程方式将UIViewController
连接到View.storyboard
,而不必使用情节提要的属性选项卡。我已经尝试过很多不同的方法来完成此操作,但我似乎无法弄清楚。
这里是一个StackOverflow
的问题,我也尝试着开始工作,但没有:StackOverflow
编辑
除了Christian Abella所说的那样,我确实还需要设置类似情节提要对象的类
答案 0 :(得分:2)
这是可行的,我在某些项目中也这样做。 但是您需要执行以下操作:
在“应用程序的设置”中,转到“ 信息”标签,然后清除“主故事板文件库名称”属性。
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 中删除该代码。