我在退出上有保存VC 的代码。
它可以工作,但我使用 SWRevealViewController ,但不显示应用程序中的导航控制器
我该如何纠正?
ViewController.swift
super.viewDidLoad()
NSUserDefaults.standardUserDefaults().setInteger(0, forKey: "View")
ViewController2.swift
super.viewDidLoad()
NSUserDefaults.standardUserDefaults().setInteger(1, forKey: "View")
AppDelegate.swift
let viewCount = UserDefaults.standard.integer(forKey: "View")
var VC = UIViewController()
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
print(viewCount)
if viewCount == 0 {
VC = storyboard.instantiateViewController(withIdentifier: "First") as! ViewController
} else if viewCount == 1 {
VC = storyboard.instantiateViewController(withIdentifier: "Second") as! ViewController2
}
self.window?.makeKeyAndVisible()
self.window?.rootViewController = VC
return true
答案 0 :(得分:0)
如果您的故事板中您的初始ViewController是UINavigationViewController,那么您可以在AppDelegate didFinishLaunchingWithOptions
中访问此导航控制器,如下所示:
let navigationController = application.windows[0].rootViewController as! UINavigationController
此外,无需在UserDefaults中跟踪/保存视图控制器,您可以随时访问ViewControllers列表
<强>的AppDelegate 强>
let childViewControllers = window?.rootViewController?.childViewControllers
print("childVC: \(String(describing: childViewControllers))")
在任何其他 ViewController
中let childViewControllers = UIApplication.shared.keyWindow?.rootViewController?.childViewControllers
print("vcs : \(String(describing: childViewControllers))")
当然,您可以比较childViewControllers列表
if let childViewControllers = UIApplication.shared.keyWindow?.rootViewController?.childViewControllers {
for viewController in childViewControllers {
if viewController is FirstViewController {
print("firstViewController found...")
}
if viewController is SecondViewController {
print("secondViewController found...")
}
}
}
如果你使用storyboard为侧面菜单设置SWRevealViewController,那么基本设置应该像
有关 SWRevealViewController 的详细信息,请查看他们的GitHub documentation,查看示例项目并在此处提及教程以便深入了解。希望它有所帮助。
答案 1 :(得分:0)
所以我认为问题在于您将窗口的根视图控制器设置为常规视图控制器。您需要做的是将其设置为带有嵌入式视图控制器的导航控制器。我不确定您使用SWRevealViewController
的确切设置,但我想您需要这样的内容:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let viewCount = UserDefaults.standard.integer(forKey: "View")
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let VC = storyboard.instantiateViewController(withIdentifier: "First") as! ViewController
let frontNavigationController = UINavigationController(rootViewController: VC)
let VC2 = storyboard.instantiateViewController(withIdentifier: "TableView") as! TableView
let rearNavigationController = UINavigationController(rootViewController: VC2)
let revealVC = SWRevealViewController(rearViewController: rearNavigationController, frontViewController: frontNavigationController)
revealVC.delegate = self
self.window?.rootViewController = nil
self.window?.rootViewController = revealVC
self.window?.makeKeyAndVisible()
return true
}
如果这不起作用,或者您希望实现的目标,请在评论中提问。
编辑:
因此,如果要在左侧显示TableView
菜单,则必须将其故事板ID设置为TableView
(obvs在故事板中设置此项)。然后上面的代码应该可以工作。
我不完全确定您使用UserDefaults
保存VC的原因。但您现在可以使用TableView
类在VC之间导航。如果要保存上次访问的VC并在应用程序完成启动时显示,则需要:
var string = ""
switch viewCount {
case 0:
string = "First"
case 1:
string = "Second"
case 2:
string = "Third"
case 3:
string = "Fourth"
case 4:
string = "Fifth"
default:
string = "First"
}
let VC = storyboard.instantiateViewController(withIdentifier: string)
let frontNavigationController = UINavigationController(rootViewController: VC)
确保您已将每个VC的故事板ID设置为&#34; First&#34;,&#34; Second&#34;,&#34; Third&#34;等等。这将取代之前答案中let VC
和let frontNavigationController
的先前声明。