BarButtonItem 没有出现
Posted
技术标签:
【中文标题】BarButtonItem 没有出现【英文标题】:BarButtonItem not showing up 【发布时间】:2016-03-16 19:45:11 【问题描述】:在我制作的应用程序中,我尝试启用登录/注销到 Twitter。我想要它,以便有一个 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 中使用了相同的方法,而且它似乎工作正常。
【问题讨论】:
传递给 login() 的块是否在主线程上执行?如果你在 onLogin() 和 onLogout() 中打印一些东西,你看到消息了吗? 您可能会取消您的self.logoutButton
和self.loginButton
。在分配它们之前打印它们的描述。
【参考方案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
【讨论】:
let shouldLogin: Bool = sender.tag == 0 ? true : false
应该只是 let shouldLogin: Bool = sender.tag == 0
不知道你为什么添加了不必要的三元运算符
@Qunin:你可以用自己的方式修改代码。我只是给出了示例代码。如果您不喜欢三元条件语句,请使用 if else 条件块..
我的意思是,在这种情况下,三元运算符绝对什么都不做,也没有必要使用 if else ......那会更糟
@Qunin:我使用三元运算符只是为了代码可读性。以上是关于BarButtonItem 没有出现的主要内容,如果未能解决你的问题,请参考以下文章
如何在苹果电视的导航栏的 BarButtonItem 上移动焦点?
Tab Bar Controller + Navigation Controller + Bar Button Item