成功登录或注册时隐藏按钮

时间:2019-04-05 09:11:48

标签: swift swift4.2

我有两个屏幕A和B。

在屏幕A中,我有一个UIBarButtonItem用于登录/注册。

按下该按钮,新的弹出窗口将打开,并带有登录和注册视图。

现在,我需要在成功注册后隐藏屏幕A上的按钮登录/注册按钮,或者在显示为弹出窗口的屏幕B中进行登录。

目前,我已在成功登录/注册后关闭了屏幕B,并且在下次启动该应用程序时,按钮处于隐藏状态。

我已经在屏幕A上使用它来隐藏按钮。

if(currentUser != nil) {
    loginRegisterButton.isHidden = true
}else {
    loginRegisterButton.isHidden = false
}

仅在下次启动应用程序时有效。 我想要的是成功关闭屏幕B。

2 个答案:

答案 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)