无法更改右导航按钮标题

时间:2018-10-15 12:47:02

标签: ios swift uibarbuttonitem

我在proxyTable: { "/api/": { target: "https://rest.service/api/", changeOrigin: true, secure: false, logLevel: 'debug', onError: function (err, req, res) { console.log(res, req, err) } }, 中设置了一个右侧导航按钮。类viewWillAppear ..

ChatMessageViewController

现在,点击let button2 = UIBarButtonItem(image: nil, style: .plain, target: self, action: #selector(blockPressed(sender:))) button2.title = "Block" self.navigationItem.rightBarButtonItem = button2 时,另一个共享函数被称为...

blockPressed

(此功能基本上像阻止whatsapp用户一样阻止特定的用户。一旦发生阻止,就会调用某些委托方法。在我更改@objc fileprivate func blockPressed(sender: UIButton) { XMPPConfig.shared.blockUser(userJID: theUserJID!) //XMPPConfig is another class having some common functions and delegate methods. } 按钮之后,这样的委托方法如下。) / p>

Block

这样做还可以像这样...正确地调用func xmppBlocking(_ sender: XMPPBlocking!, didBlockJID xmppJID: XMPPJID!) { print("successfully blocked!") ChatMessageViewController.shared.setupUnBlock() } 中的setupUnBlock()函数...

ChatMessageViewController

但是按钮标题仍然保持不变...它仍然是“阻止” ..这可能是什么原因...?

2 个答案:

答案 0 :(得分:0)

您应该使用其他初始化程序初始化UINavigationBarButton

let right = UIBarButtonItem(title: "Some title", style: .plain, target: self, action: #selector(rightNavBarButtonPressed))

您使用的是UIBarButtonItem(image:...

答案 1 :(得分:0)

我试图复制您的代码,显然一切正常。

据我所知,该问题可能是由于三个可能的问题引起的。

  1. 这可能是线程问题。除非您没有在xcode中打开线程检查器,否则这是不正确的。但是在unblock和block代码中,输入

    print(Thread.current) 要查看设置rightbarButton的两个代码块在主线程中。如果没有,您应该知道如何解决它们。

  2. 这可能是视图更新问题,仍然不太可能,但是值得一试。.因此,在要添加rightBarButton的代码块中,再添加一行代码。

    self.navigationController?.viewIfLoaded?.setNeedsLayout()

设置rightBarButtonItem后,

可以更新navigationController的视图。

  1. 在我看来,最可能的问题是,您一直在加倍调用块barButtonItem代码。这意味着,当您调用unblock barButtonItem设置代码时,也意外地调用了barbarItem块。

调试起来很容易,您只需在每个代码块中放置一条语句,以查看它们是否一起出现。