Self.revealViewController() returns 无
Self.revealViewController() returns nil
我目前正在尝试使用平移手势来显示控制器。截至目前,我的打开按钮可以使用,但是当我添加最后一行时,我的程序崩溃了,因为 revealViewController 为 nil。 Link 转播:https://github.com/John-Lluch/SWRevealViewController。
import Foundation
import UIKit
class MainViewController : UIViewController{
@IBOutlet weak var mainButton: UIView!
@IBOutlet weak var Open: UIBarButtonItem!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated);
mainButton.makeCircle();
Open.target = self.revealViewController()
Open.action = #selector(SWRevealViewController.revealToggle(_:));
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer());
}
}
您可能还没有将 SWRevealViewController
设置为 rootViewController
。请记住在您的 Identity inspector[=] 中将 Custom Class 和 Storyboard ID 设置为 SWRevealViewController
34=].
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootVC = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController")
self.view.window?.rootViewController = rootVC
// Cont. with your code...
}
如果您需要在开始时显示登录页面,您需要在 AppDelegate
中添加一个函数,它允许 window 更新 rootViewController
func changeRootVCToSWRevealVC () {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootVC = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController")
if let window = self.window{
window.rootViewController = rootVC
}
}
用户登录后,您可以将rooViewController
更改为SWRevealViewController
。
if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
appDelegate.changeRootVCToSWRevealVC()
}
如果您有一个存储上次登录状态的变量,并且想直接导航到导航抽屉菜单而不是 LoginViewController
。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let rootVCId = isLoggedin ? "SWRevealViewController" : "LoginViewController"
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootVC = storyboard.instantiateViewController(withIdentifier: rootVCId)
self.view.window?.rootViewController = rootVC
// Cont. with your code...
}
我刚遇到同样的问题并遇到了这个 post。结果我的问题更像是一个 "oops!",因为我错过了一些明显的东西并且花了 30 分钟挠头。 :脸掌:
如果已接受的答案对您不起作用,请检查以确保您已将菜单 属性 连接到带有插座的故事板。
Swift:
@IBOutlet weak var menuButton:UIBarButtonItem!
override func viewDidLoad() {
if (self.revealViewController() != nil) {
menuButton.target = self.revealViewController()
menuButton.action = #selector(SWRevealViewController.revealToggle(_:))
}
}
我目前正在尝试使用平移手势来显示控制器。截至目前,我的打开按钮可以使用,但是当我添加最后一行时,我的程序崩溃了,因为 revealViewController 为 nil。 Link 转播:https://github.com/John-Lluch/SWRevealViewController。
import Foundation
import UIKit
class MainViewController : UIViewController{
@IBOutlet weak var mainButton: UIView!
@IBOutlet weak var Open: UIBarButtonItem!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated);
mainButton.makeCircle();
Open.target = self.revealViewController()
Open.action = #selector(SWRevealViewController.revealToggle(_:));
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer());
}
}
您可能还没有将 SWRevealViewController
设置为 rootViewController
。请记住在您的 Identity inspector[=] 中将 Custom Class 和 Storyboard ID 设置为 SWRevealViewController
34=].
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootVC = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController")
self.view.window?.rootViewController = rootVC
// Cont. with your code...
}
如果您需要在开始时显示登录页面,您需要在 AppDelegate
中添加一个函数,它允许 window 更新 rootViewController
func changeRootVCToSWRevealVC () {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootVC = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController")
if let window = self.window{
window.rootViewController = rootVC
}
}
用户登录后,您可以将rooViewController
更改为SWRevealViewController
。
if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
appDelegate.changeRootVCToSWRevealVC()
}
如果您有一个存储上次登录状态的变量,并且想直接导航到导航抽屉菜单而不是 LoginViewController
。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let rootVCId = isLoggedin ? "SWRevealViewController" : "LoginViewController"
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let rootVC = storyboard.instantiateViewController(withIdentifier: rootVCId)
self.view.window?.rootViewController = rootVC
// Cont. with your code...
}
我刚遇到同样的问题并遇到了这个 post。结果我的问题更像是一个 "oops!",因为我错过了一些明显的东西并且花了 30 分钟挠头。 :脸掌:
如果已接受的答案对您不起作用,请检查以确保您已将菜单 属性 连接到带有插座的故事板。
Swift:
@IBOutlet weak var menuButton:UIBarButtonItem!
override func viewDidLoad() {
if (self.revealViewController() != nil) {
menuButton.target = self.revealViewController()
menuButton.action = #selector(SWRevealViewController.revealToggle(_:))
}
}