2016-03-16 42 views
1

在一個應用程序進行中,我試圖啓用登錄/註銷到Twitter。我想要它,以便有一個barbuttonitem,要麼說,如果沒有當前用戶登錄,要麼登錄,如果有的話。我在故事板上創建了兩個按鈕,一個用於登錄,另一個用於註銷。在viewDidLoad()中,我有這樣的代碼:BarButtonItem沒有顯示

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中使用相同的方法,它似乎工作正常。

+0

傳遞給登錄()塊主線程上執行?如果您在onLogin()和onLogout()中打印某些內容,您是否看到這些消息? –

+0

您可能會取消您的'self.logoutButton'和'self.loginButton'。在分配它們之前打印它們的描述。 – sschale

回答

1

此代碼可以幫助你

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 
    }