Ios 从LaunchScreen切换到Main.Storyboard中的viewController?
我想在启动屏幕中执行一些逻辑,如果检查正常,我想切换到viewController,如果没有,我想切换到另一个,这可能吗 不,您不能为Ios 从LaunchScreen切换到Main.Storyboard中的viewController?,ios,swift,viewcontroller,launch-screen,Ios,Swift,Viewcontroller,Launch Screen,我想在启动屏幕中执行一些逻辑,如果检查正常,我想切换到viewController,如果没有,我想切换到另一个,这可能吗 不,您不能为启动屏幕.情节提要编码,原因是:-当您的启动屏幕.情节提要显示应用程序仍在加载时 简单地说:当你的应用程序显示启动屏幕时,你无法访问它。情节提要,你所能做的就是为它创建一个UI/UX,而不是为它执行任何代码。 备选方案:-制作一个显示为第一个viewController的viewController,在那里检查您的逻辑并相应地执行操作 参考:-运行您的签入didf
启动屏幕.情节提要
编码,原因是:-当您的启动屏幕.情节提要
显示应用程序仍在加载时
简单地说:当你的应用程序显示启动屏幕时,你无法访问它。情节提要
,你所能做的就是为它创建一个UI/UX,而不是为它执行任何代码。
备选方案:-制作一个显示为第一个viewController的viewController
,在那里检查您的逻辑并相应地执行操作
参考:-运行您的签入
didfishlaunchwithoptions()
并使用它直接“跳转”到特定的vc。下面是一个使用userDefaults的示例,但是当然,您可以用正在运行的任何检查来替换它
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Do some logic
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let welcomeVC = storyboard.instantiateViewControllerWithIdentifier("WelcomeNavController")
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.rootViewController = welcomeVC
self.window?.makeKeyAndVisible()
}
}
加载应用程序时将显示启动屏幕。转到您的
AppDelgate
:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
window.rootViewController = //your root view controller that you have figured out with logic
return true
}
func initialVC(storyboardID: String) {
let mainStoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewController : UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier("\(storyboardID)") as UIViewController
self.window?.makeKeyAndVisible()
if storyboardID == "tabBarVC" {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.rootViewController = initialViewController
} else {
let navController = UINavigationController(rootViewController: initialViewController)
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.rootViewController = navController
}
}
我想在我的启动屏幕上做一些逻辑
现在我明白了这个问题,我可以回答:不要。稍后再做耗时的逻辑。你的任务是快速启动。您需要使用选项退出ApplicationIDFinishLaunching,退出viewDidLoad
,然后启动
你在那一点上展示什么取决于你;如果您有耗时的东西(在您的情况下,听起来像是在联网或在加载表的数据源时做其他需要时间的事情),并且您希望显示一个特殊的视图控制器,该控制器使用旋转的活动视图或其他什么来覆盖时间,那么很好。但在实际发射过程中并不是这样做的时候 将此函数添加到AppDelegate
:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
window.rootViewController = //your root view controller that you have figured out with logic
return true
}
func initialVC(storyboardID: String) {
let mainStoryboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let initialViewController : UIViewController = mainStoryboard.instantiateViewControllerWithIdentifier("\(storyboardID)") as UIViewController
self.window?.makeKeyAndVisible()
if storyboardID == "tabBarVC" {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.rootViewController = initialViewController
} else {
let navController = UINavigationController(rootViewController: initialViewController)
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window?.rootViewController = navController
}
}
在AppDelegate
中的didfishlaunchingwithoptions
方法中,您可以添加以下内容:
if currentUser != nil {
initialVC("tabBarVC")
} else {
initialVC("loginVC")
}
您可以在我的示例中看到,根据用户是否登录,我正在加载主应用程序VC或登录VC。在您的例子中,可以使用if-else语句并在initialVC
函数中执行逻辑
注意:当我调用加载loginVC
时,我必须加载navigationController
,因为loginVC
嵌入在navigationController中。对于tabBarVC
,我不嵌入navController
,因为它不需要 LaunchScreen你是说LaunchSotryboard?或者它只是层次结构中的另一个viewController?它是LaunchScreen.storyboard。我想在Main.Storyboard中切换到一个特定的脚本。在执行一些逻辑操作时,是否有任何方法可以继续显示启动屏幕?我不想在逻辑完成之前启动屏幕消失。@Recusiwe这是个好问题,我真的不知道答案。我猜这取决于逻辑在哪里,appDelegate还是在视图控制器中,但这只是一个猜测。是的,我想在appDelegate中执行一些逻辑,根据逻辑的结果,我想显示一个特定的视图控制器。@Recusiwe是的,您在代码中实现了我的答案了吗。它可以做到“我不喜欢在数据准备好的时候显示未完成的表格,但我会重新考虑”这就是我建议您做的。您可以在此期间显示其他内容,但不能在应用程序启动时显示LaunchScreen.storyboard。你必须快速发射。希望有帮助。(还有一个关于这个主题的WWDC视频。)@SAHM这不是我们刚才讨论的吗?你不能发射。运行时正在启动您,您的工作是让路,让它这样做。您“不知道何时退出viewDidLoad
”。您只需实现事件消息,就可以在它们表示的时刻执行适当的操作,不多也不少。