PvD*_*Dev 6 xcode ios swrevealviewcontroller swift firebase-authentication
我有不同的故事板叫做Main,tabBar,home,map等.在tabBar的故事栏中,我使用了SWRevealViewController视图并作为初始视图启动.在主要的Storyboard中,只有两个用于登录和注册控制器.
我的问题是当用户注销并返回时它自动进入主屏幕而不是登录屏幕[此问题是由于SWRevealViewController是初始视图控制器].
我试过这里的代码:在符号视图控制器中
在viewDidAppear中检查firebase中是否有可用的用户
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if API.User.CURRENT_USER != nil {
// segue to the Tab Bar Controller
self.performSegue(withIdentifier: "signInToTabBar", sender: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
登录动作:
@IBAction func SignInButton(_ sender: Any) {
view.endEditing(true)
guard
let email = emailTextField.text, !email.isEmpty,
let password = passwordTextField.text, !password.isEmpty
else {
self.showErrorAlert(message: "Username or email or passowrd should not be empty")
return
}
// show the progress to the user
ProgressHUD.show("Starting sign-in...", interaction: false)
// use the signIn class method of the AuthService class
AuthService.signIn(email: emailTextField.text!, password: passwordTextField.text!, onSuccess: {
// on success segue to the Tab Bar Controller
API.User.observeCurrentUser { user in
guard let currentUser = Auth.auth().currentUser else {
return
}
PrefsManager.sharedinstance.UIDfirebase = currentUser.uid
PrefsManager.sharedinstance.username = user.username!
PrefsManager.sharedinstance.userEmail = user.email!
PrefsManager.sharedinstance.imageURL = user.profileImageURL!
ProgressHUD.showSuccess("Sucessfully signed in.")
self.performSegue(withIdentifier: "signInToTabBar", sender: nil)
}
}, onError: { errorString in
ProgressHUD.dismiss()
self.showErrorAlert(message: errorString ?? "Server error")
})
}
Run Code Online (Sandbox Code Playgroud)
}
SWRevealViewController菜单表我列出了菜单,如家,预订,个人资料,注销:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! MenuTableViewCell
cell.menuName.text = menuName[indexPath.row]
cell.menuIcon.image = UIImage(named: menuImage[indexPath.row])
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// tableView.deselectRow(at: indexPath, animated: true)
let row = indexPath.row
if row == 0{
let storyboard = UIStoryboard(name: "Home", bundle: nil)
let obj = storyboard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
let navController = UINavigationController(rootViewController: obj)
navController.setViewControllers([obj], animated:true)
navController.tabBarController?.tabBar.isHidden = false
self.revealViewController().setFront(navController, animated: true)
self.revealViewController().setFrontViewPosition(FrontViewPosition.left, animated: true)
} else if row == 1{
let storyboard = UIStoryboard(name: "Bookings", bundle: nil)
let obj = storyboard.instantiateViewController(withIdentifier: "BookingsViewController") as! BookingsViewController
let navController = UINavigationController(rootViewController: obj)
navController.setViewControllers([obj], animated:true)
self.revealViewController().setFront(navController, animated: true)
self.revealViewController().setFrontViewPosition(FrontViewPosition.left, animated: true)
} else if row == 2 {
let storyboard = UIStoryboard(name: "Profile", bundle: nil)
let obj = storyboard.instantiateViewController(withIdentifier: "profileViewController") as! profileViewController
let navController = UINavigationController(rootViewController: obj)
navController.setViewControllers([obj], animated:true)
self.revealViewController().setFront(navController, animated: true)
self.revealViewController().setFrontViewPosition(FrontViewPosition.left, animated: true)
} else if row == 3 {
print(indexPath)
// Log out user from Firebase
AuthService.signOut(onSuccess: {
// Present the Sign In VC
// PrefsManager.sharedinstance.logoutprefences()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let signInVC = storyboard.instantiateViewController(withIdentifier: "signInViewController")
self.present(signInVC, animated: true)
// self.navigationController?.pushViewController(signInVC, animated: true)
}) { (errorMessage) in
ProgressHUD.showError(errorMessage)
}
}
}
Run Code Online (Sandbox Code Playgroud)
在家庭视图控制器中,检查用户是否可用:
override func viewDidAppear(_ animated: Bool) {
if API.User.CURRENT_USER != nil {
// segue to the Tab Bar Controller
self.performSegue(withIdentifier: "signInToTabBar", sender: nil)
}
super.viewDidAppear(true)
self.tabBarController?.tabBar.isHidden = false
}
Run Code Online (Sandbox Code Playgroud)

小智 0
您必须更改 RootViewController 并将 signInViewController 设置为根 VC,而不是导航(performSegue)。
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let obj = storyboard.instantiateViewController(withIdentifier: "signInViewController") as! signInViewController
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
appDelegate.window?.rootViewController = obj
Run Code Online (Sandbox Code Playgroud)
另外,在您的应用程序(_:didFinishLaunchingWithOptions :) 中,您必须检查您的用户会话
if API.User.CURRENT_USER != nil {
//SET YOUR ROOT VIEW CONTROLLER HERE
}
Run Code Online (Sandbox Code Playgroud)
您需要将根 VC 设置为signInViewController 或revealViewController(当用户存在时)
| 归档时间: |
|
| 查看次数: |
714 次 |
| 最近记录: |