我有两个屏幕A和B。
在屏幕A中,我有一个UIBarButtonItem
用于登录/注册。
按下该按钮,新的弹出窗口将打开,并带有登录和注册视图。
现在,我需要在成功注册后隐藏屏幕A上的按钮登录/注册按钮,或者在显示为弹出窗口的屏幕B中进行登录。
目前,我已在成功登录/注册后关闭了屏幕B,并且在下次启动该应用程序时,按钮处于隐藏状态。
我已经在屏幕A上使用它来隐藏按钮。
if(currentUser != nil) {
loginRegisterButton.isHidden = true
}else {
loginRegisterButton.isHidden = false
}
仅在下次启动应用程序时有效。 我想要的是成功关闭屏幕B。
答案 0 :(得分:0)
您可以将具有UIBarButton项的视图控制器从第一个视图控制器传递到处理登录的视图,并在成功登录后从视图中隐藏初始视图控制器中存在的按钮。例如。
class FirstVC: UIViewController {
var barButtonItem: UIBarButtonItem?
// ...
func presentPopUp() {
let popUp = PopUpView()
//Configure PopUpView class that handles the login
popUp.parentViewController = self
}
}
class PopUpView: UIView {
var parentViewController: FirstVC?
func login() {
// If successfull
parentViewController?.navigationItem.leftBarButtonItem = nil
}
}
答案 1 :(得分:0)
将委托回调从ViewControllerB
传递到ViewControllerA
代理协议:
protocol ViewControllerBDelegate {
func loginSuccess(user: YOUR_CURRENT_USER_OBJECT_TYPE)
}
在ViewControllerB中:
var delegate: ViewControllerBDelegate?
成功注册后
self.delegate?.loginSuccess(user: YOUR_CURRENT_USER_OBJECT_VALUE)
在ViewControllerA中:
extension ViewControllerA: ViewControllerBDelegate {
func loginSuccess(user: YOUR_CURRENT_USER_OBJECT_TYPE) {
currentUser = user
}
}
同时打开ViewController B:
let controller = ViewControllerB(nibName: "ViewControllerB", bundle: nil)
controller.delegate = self
self.navigationController?.pushViewController(controller, animated: false)