如何仅使用代码在 iOS 应用程序中显示 ViewController?
How to show a ViewController in your iOS app by only using Code?
我想在我的应用中显示 ViewController 而不使用故事板入口点。
我确保删除了默认故事板入口点并且故事板 ID 和名称是正确的。当 运行 模拟器上的应用程序时,我得到的一切仍然只是黑屏。
这是我的 AppDelegate.swift 文件。
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
window = UIWindow(frame: UIScreen.main.bounds)
let sb = UIStoryboard(name: "Main", bundle: nil)
let initialViewController = sb.instantiateViewController(withIdentifier: "VC")
window?.rootViewController = initialViewController
window?.makeKeyAndVisible()
return true
}
// MARK: UISceneSession Lifecycle
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
// Called when the user discards a scene session.
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}
}
感谢各种帮助。
它与应用程序委托的 SceneDelegate
有点不同。您使用 UIWindowScene
来构造您的 UIWindow
.
let sb = UIStoryboard(name: "Main", bundle: nil)
let initialViewController = sb.instantiateViewController(withIdentifier: "VC")
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = initialViewController
self.window = window
window.makeKeyAndVisible()
}
如果您使用的是 Viewcontrollers 和 xcode 11.3.1 或更高版本,请在创建新项目后按照以下步骤操作。
- 从 info.plist 中删除应用程序场景清单
删除SceneDelegate.swift文件
从 AppDelegate 文件中删除 Swift UI 相关方法。
删除ContentView.swift文件
新建ViewController文件
文件>新建>Cocoa 触摸 Class
在 AppDelegate 文件中设置 MainViewController。
添加这个
window = UIWindow(frame: UIScreen.main.bounds)
window!.rootViewController = MainViewController()
window!.makeKeyAndVisible()
window?.rootViewController = UINavigationController(rootViewController: MainViewController())
我想在我的应用中显示 ViewController 而不使用故事板入口点。
我确保删除了默认故事板入口点并且故事板 ID 和名称是正确的。当 运行 模拟器上的应用程序时,我得到的一切仍然只是黑屏。
这是我的 AppDelegate.swift 文件。
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
window = UIWindow(frame: UIScreen.main.bounds)
let sb = UIStoryboard(name: "Main", bundle: nil)
let initialViewController = sb.instantiateViewController(withIdentifier: "VC")
window?.rootViewController = initialViewController
window?.makeKeyAndVisible()
return true
}
// MARK: UISceneSession Lifecycle
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
// Called when the user discards a scene session.
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}
}
感谢各种帮助。
它与应用程序委托的 SceneDelegate
有点不同。您使用 UIWindowScene
来构造您的 UIWindow
.
let sb = UIStoryboard(name: "Main", bundle: nil)
let initialViewController = sb.instantiateViewController(withIdentifier: "VC")
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = initialViewController
self.window = window
window.makeKeyAndVisible()
}
如果您使用的是 Viewcontrollers 和 xcode 11.3.1 或更高版本,请在创建新项目后按照以下步骤操作。
- 从 info.plist 中删除应用程序场景清单
删除SceneDelegate.swift文件
从 AppDelegate 文件中删除 Swift UI 相关方法。
删除ContentView.swift文件
新建ViewController文件 文件>新建>Cocoa 触摸 Class
在 AppDelegate 文件中设置 MainViewController。
添加这个
window = UIWindow(frame: UIScreen.main.bounds)
window!.rootViewController = MainViewController()
window!.makeKeyAndVisible()
window?.rootViewController = UINavigationController(rootViewController: MainViewController())