Ios 巴布托主义没有出现

Ios 巴布托主义没有出现,ios,swift,uinavigationbar,uibarbuttonitem,Ios,Swift,Uinavigationbar,Uibarbuttonitem,在应用程序Im making中,Im尝试启用登录/注销twitter。我想要它,这样就有了一个Barbuttonite,如果没有当前用户,就说登录,如果有,就说注销。我在故事板上创建了两个按钮,一个用于登录,一个用于注销。在viewDidLoad()中,我有以下代码: self.navigationItem.rightBarButtonItem = nil self.navigationItem.rightBarButtonItem = nil if twitterUser.

在应用程序Im making中,Im尝试启用登录/注销twitter。我想要它,这样就有了一个Barbuttonite,如果没有当前用户,就说登录,如果有,就说注销。我在故事板上创建了两个按钮,一个用于登录,一个用于注销。在viewDidLoad()中,我有以下代码:

self.navigationItem.rightBarButtonItem = nil
    self.navigationItem.rightBarButtonItem = nil


    if twitterUser.currentUser != nil {
        print("there is a current user")

        self.navigationItem.rightBarButtonItem = logoutButton

    } else {
        self.navigationItem.rightBarButtonItem = loginButton
    }
而且似乎效果很好。当用户实际登录或注销时,问题就出现了。按钮连接到以下功能:

@IBAction func onLogin(sender: AnyObject) {

    let client = twitterAPI.sharedInstance

    client.login({ () -> () in

        self.navigationItem.rightBarButtonItem =  nil

        self.navigationItem.rightBarButtonItem = self.logoutButton

        }) { (error: NSError) -> () in
            print(error.localizedDescription)
    }


}


    @IBAction func onLogout(sender: AnyObject) {
    twitterAPI.sharedInstance.logout()
    self.navigationItem.rightBarButtonItem = nil
    self.navigationItem.rightBarButtonItem = self.loginButton
}
登录后,登录按钮将消失,但注销按钮不会显示。注销时,“注销”按钮消失,但“登录”按钮不出现。我不确定是什么原因导致了这种情况,因为我在viewDidLoad中使用了相同的方法,而且似乎工作正常。

此代码可能会对您有所帮助

    override func viewDidLoad() 
    {
       super.viewDidLoad()
       barButton = UIBarButtonItem(title: "Login", style: UIBarButtonItemStyle.Done, target: self, action: "barBtnAction:")
       barButton.tag = 0
       self.navigationItem.rightBarButtonItem = barButton
    }

    @IBAction func barBtnAction(sender:UIBarButtonItem)
    {           
       let shouldLogin: Bool = sender.tag == 0 ? true : false
       if shouldLogin
       {
          //your code here
          onLogin()
       }
       else
       {
          //your code here
          onLogout()
       }
    }

  func onLogin()
  {
      barButton.title = "Logout"
      barButton.tag = 1
  }

  func onLogout()
  {
      barButton.title = "Login"
      barButton.tag = 0
  }

传递给login()的块是否在主线程上执行?如果您在onLogin()和onLogout()中打印了一些内容,您看到消息了吗?您可能正在取消您的
self.logoutButton
self.loginButton
。在分配它们之前打印它们的描述。
让shouldLogin:Bool=sender.tag==0?true:false
应该是
让shouldLogin:Bool=sender.tag==0
不知道为什么要添加不必要的三元operator@Qunin:您可以用自己的方式修改代码。。我只是给出了示例代码。如果你不喜欢三元条件语句,那么就使用If-else条件块。我的观点是,在这种情况下,三元运算符完全不起任何作用,也不需要使用If-else。。。那就更公平了worse@Qunin:我使用三元运算符只是为了代码可读性。