注销按钮操作不起作用

Posted

技术标签:

【中文标题】注销按钮操作不起作用【英文标题】:Logout button action not working 【发布时间】:2017-03-05 09:26:39 【问题描述】:

上下文是,当用户点击登录按钮时,应用程序将使用 Web 服务检查凭据,如果用户被授权,则用户名和密码存储在 userDefaults 中(当用户再次打开应用程序时自动登录)

现在我在下一页使用注销按钮(用户在成功登录后进入的位置),这是我的注销按钮的代码,它不起作用。

据我说,点击注销时,它应该删除 userDefaults,然后返回登录页面。 目前我不关心外观,只是帮我写代码。

添加按钮的功能。

 override func viewDidLoad()
        
            super.viewDidLoad()
            let doneItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.trash, target: nil, action: #selector(self.logoutButtonTapped(_:)));
            navigationItem.rightBarButtonItem = doneItem;
            // Do any additional setup after loading the view.
        

注销按钮功能:

func logoutButtonTapped(_ sender: Any)
    
        let defaults = UserDefaults.standard
        defaults.removeObject(forKey: "userName")
        defaults.removeObject(forKey: "userPassword")
        let newViewObject = storyboard?.instantiateViewController(withIdentifier: "LoginPageViewController") as! LoginPageViewController //LoginPageViewController is my login view file, and identifier also has the same name.
        navigationController?.pushViewController(newViewObject, animated: true)
    

这是我的故事板。我正在以编程方式添加按钮。

【问题讨论】:

你能展示你的 stroyboard 场景吗 target 设置为self 【参考方案1】:

如果你的 Login VC 作为初始 VC,那么在这个地方调用

let newViewObject = storyboard?.instantiateViewController(withIdentifier: "LoginPageViewController") as! LoginPageViewController //LoginPageViewController is my login view file, and identifier also has the same name.
    navigationController?.pushViewController(newViewObject, animated: true)

使用

_ = navigationController?.popViewController(animated: true)

否则

  _ = navigationController?.popToRootViewController(animated: true)

更新答案

 func logoutButtonTapped(_ sender: Any)
    
        let defaults = UserDefaults.standard
        defaults.removeObject(forKey: "userName")
        defaults.removeObject(forKey: "userPassword")
         _ = navigationController?.popToRootViewController(animated: true)

    

例如

  navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Logout", style: .plain, target: self, action: #selector(logoutButtonTapped))

然后像这样调用动作

 func logoutButtonTapped() 

    let defaults = UserDefaults.standard
    defaults.removeObject(forKey: "userName")
    defaults.removeObject(forKey: "userPassword")

   // _ = navigationController?.popViewController(animated: true)

     _ = navigationController?.popToRootViewController(animated: true)




【讨论】:

当然我会看到的,我也会试试这个答案。谢谢你。 :) 我还用故事板图片更新了我的问题。 你可以登录按钮操作吗 嘿,我听不懂你的回答。我只用了几天的 ios。你能再帮点忙吗? @AshishSharma - 当然,你打的地方 兄弟,我认为控件本身永远不会达到注销操作。因为,用户默认值不会被删除。

以上是关于注销按钮操作不起作用的主要内容,如果未能解决你的问题,请参考以下文章

无法弄清楚为啥我的注销按钮不起作用(php)[重复]

注销按钮在 mvc 应用程序中不起作用

Instagram注销在iPhone中不起作用?

单次注销在 keycloak 和 spring security 中不起作用

颤动的firebaseauth signout()不起作用

logout() 在使用 passport.js、express.js、AngularJs 时不起作用