注销按钮操作不起作用
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 - 当然,你打的地方 兄弟,我认为控件本身永远不会达到注销操作。因为,用户默认值不会被删除。以上是关于注销按钮操作不起作用的主要内容,如果未能解决你的问题,请参考以下文章