BarButtonItem не отображается

В приложении, которое я делаю, я пытаюсь разрешить вход/выход из твиттера. Я хочу, чтобы был элемент barbuttonitem, который говорит либо о входе в систему, если нет текущего пользователя, либо о выходе из системы, если он есть. Я создал две кнопки на раскадровке, одну для входа и одну для выхода. В 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, и, похоже, он работает нормально.


person dmar    schedule 16.03.2016    source источник
comment
Блок, переданный в login(), выполняется в основном потоке? Если вы печатаете что-то в onLogin() и onLogout(), вы видите сообщения?   -  person Phillip Mills    schedule 16.03.2016
comment
Возможно, вы аннулируете свои self.logoutButton и self.loginButton. Распечатайте их описание, прежде чем назначать их.   -  person sschale    schedule 17.03.2016


Ответы (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
  }
person iOS_Binod    schedule 16.03.2016
comment
let shouldLogin: Bool = sender.tag == 0 ? true : false должно быть просто let shouldLogin: Bool = sender.tag == 0 не знаю, зачем вы добавили ненужный тернарный оператор - person Quinn; 16.08.2018
comment
@Qunin: вы можете изменить код по-своему .. я просто дал только пример кода. Если вам не нравится тернарный условный оператор, используйте условный блок if else. - person iOS_Binod; 27.08.2018
comment
Моя точка зрения заключалась в том, что тернарный оператор в этом случае абсолютно ничего не делает, нет необходимости использовать if else... это было бы еще хуже - person Quinn; 28.08.2018
comment
@Qunin: я использовал тернарный оператор только для удобства чтения кода. - person iOS_Binod; 29.08.2018