我正在构建一个应用程序,如果用户登录,则必须更改其根视图控制器。如果用户登录,则我必须将标签栏控制器显示为主屏幕(如果用户未登录),则必须显示身份验证控制器。我的两个控制器都是情节提要控制器。现在在我的应用程序委托中,我输入了以下代码
window = UIWindow(frame: UIScreen.main.bounds)
if UserDefaults.standard.bool(forKey: Constants.UserDefaultsKeys.isLoggedIn){
initialViewController = storyboard.instantiateViewController(identifier: Constants.StoryBoards.homeViewController) as! TabController
}else{
initialViewController = storyboard.instantiateViewController(identifier: Constants.StoryBoards.authenticationController)
}
window?.rootViewController = initialViewController
window?.makeKeyAndVisible()
按照如果用户登录的代码,TabController
必须showed.But它是不是被shown.I试图调试TabController
的viewDidLoad
被称为但是我的authenticationController
正在显示那可能是因为authenticationController
被设置为初始视图-
控制在故事板。有人可以帮我解决这个问题吗
如果您仅定位iOS 13+
,则只需要做的更改就是添加一行:
window?.rootViewController = initialViewController
// add this line
self.window = window
window?.makeKeyAndVisible()
如果要支持早期的iOS版本,请使用完整的SceneDelegate / AppDelegate实现:
SceneDelegate.swift
//
// SceneDelegate.swift
// Created by Don Mag on 3/27/20.
//
import UIKit
// entire class is iOS 13+
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
print("Scene Delegate willConnectTo", UserDefaults.standard.bool(forKey: "isLoggedIn"))
guard let windowScene = (scene as? UIWindowScene) else { return }
let window = UIWindow(frame: windowScene.coordinateSpace.bounds)
window.windowScene = windowScene
if UserDefaults.standard.bool(forKey: "isLoggedIn") {
guard let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "HomeVC") as? TabController else {
fatalError("Could not instantiate HomeVC!")
}
window.rootViewController = vc
} else {
guard let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "AuthVC") as? AuthViewController else {
fatalError("Could not instantiate HomeVC!")
}
window.rootViewController = vc
}
self.window = window
window.makeKeyAndVisible()
}
}
AppDelegate.swift
//
// AppDelegate.swift
// Created by Don Mag on 3/27/20.
//
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window : UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]?) -> Bool {
if #available(iOS 13, *) {
// do only pure app launch stuff, not interface stuff
} else {
print("App Delegate didFinishLaunching... isLoggedIn:", UserDefaults.standard.bool(forKey: "isLoggedIn"))
self.window = UIWindow()
if UserDefaults.standard.bool(forKey: "isLoggedIn") {
guard let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "HomeVC") as? TabController else {
fatalError("Could not instantiate HomeVC!")
}
window?.rootViewController = vc
} else {
guard let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "AuthVC") as? AuthViewController else {
fatalError("Could not instantiate HomeVC!")
}
window?.rootViewController = vc
}
window?.makeKeyAndVisible()
}
return true
}
// MARK: UISceneSession Lifecycle
// iOS 13+ only
@available(iOS 13.0, *)
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
// iOS 13+ only
@available(iOS 13.0, *)
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
}
}
我已经在ituneconnect上提交了应用程序。它目前正在等待审查状态,现在我想要更改我的应用程序的屏幕截图。 根据我的谷歌搜索,我们可以在等待审查状态下更改应用程序的屏幕截图。 但是我没有看到编辑图像选项吗?
我发现用Swing编写好的OO代码非常困难。我的问题本质上是我有一个带有动作侦听器的视图(J面板)。动作侦听器找出单击了哪个按钮,并调用适当的控制器方法。问题是这个控制器方法需要更新另一个视图。所以我遇到的问题是我有视图被到处传递给控制器。这里有一个例子。 这本质上是我想要的,但这是最终发生的事情。 您可以看到,随着需要更新的视图数量的增加以及类似于此的类数量的增加,视图本质上是全局变量,代码变得
我在Netbean中创建了名为TestA的新war应用程序。然后,我创建了新的Glassfish部署描述符glassfish-web.xml,内容如下: 然后我将我的应用程序部署到GF。上下文根仍然 /TestA,而不是 /new_context_root.为什么? Glassfish版本为3.1.2.2 断续器 如果我通过自动部署文件夹进行部署,则上下文根会正常更改,但不会从web-admin更
本文向大家介绍iOS委托的的作用?相关面试题,主要包含被问及iOS委托的的作用?时的应答技巧和注意事项,需要的朋友参考一下 答案:委托的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。可以减少框架复杂度。 另外一点,委托可以理解为java中的回调监听机制的一种类似。
我的一个项目使用Spring MVC来处理URL映射和调度逻辑。我现在必须使用一个第三方库,该库使用它自己的作为其功能的主要入口点,但由于它是另一个库的可选插入替换,所以我不能仅仅将声明放在web.xml中:我宁愿使用和Spring配置文件在这样的实现之间切换,而不必编辑web.xml。 Spring是否提供了任何服务来处理此类案件?我好像没有马上找到。 提前道谢!
问题内容: 如何在Swift中获得对应用程序委托的引用? 最终,我想使用引用来访问托管对象上下文。 问题答案: 另一种解决方案是正确的,因为它将为您提供对应用程序委托的引用,但这将不允许您访问UIApplication的子类添加的任何方法或变量,例如托管对象上下文。要解决此问题,只需向下转换为“ AppDelegate”或您的UIApplication子类碰巧被调用的任何东西。在 Swift 3、