我有两个屏幕A和B.
在屏幕A中,我有一个用于登录/注册的UIBarButtonItem
。
按下该按钮将打开新的弹出窗口,其中包含登录和注册视图。
现在我需要在成功注册时隐藏屏幕A上的按钮登录/注册按钮,或者在屏幕B中登录,该屏幕显示为弹出窗口。
现在我已成功登录/注册时取消了屏幕B,并且在下次启动应用程序时隐藏按钮。
我在屏幕A上使用它来隐藏按钮。
if(currentUser != nil) {
loginRegisterButton.isHidden = true
}else {
loginRegisterButton.isHidden = false
}
这仅适用于下次应用启动。我想要的是成功解雇屏幕B.
您可以将具有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
}
}
将代表回调从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)
在View Controller中:
extension ViewControllerA: ViewControllerBDelegate {
func loginSuccess(user: YOUR_CURRENT_USER_OBJECT_TYPE) {
currentUser = user
}
}
在打开viewcontrollerB时:
let controller = ViewControllerB(nibName: "ViewControllerB", bundle: nil)
controller.delegate = self
self.navigationController?.pushViewController(controller, animated: false)