我在容器视图中有一个集合视图。在集合视图中,我分为两个部分,UICollectionReusableView
和UICollectionViewCell
。在UICollectionReusableView内,我再次有一个集合视图,并且从该单元格中选择一个单元格时,我必须更改LeftNavigationBarTitle
。我在集合视图的didSelectItem中尝试了以下代码,但没有任何反应。
navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(named: "cancel-music")?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(self.closeViewTapped)).
我使用了上面的代码,但它没有更改navigationButton。
这是我的故事板设计。
我的代码有任何错误,请帮助我获取确切的错误。谢谢。
答案 0 :(得分:3)
为包含集合视图的视图控制器创建协议方法。
在HomeFilterVC
内
protocol HomeFilterVCDelegate: class {
func collectionViewDidTapped()
}
然后,如下声明委托变量,该变量将分配给包含UIContainerView
的视图控制器。
class HomeFilterVC: UIViewController {
weak var delegate : HomeFilterVCDelegate?
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if let selfDelegate = self.delegate {
selfDelegate.collectionViewDidTapped()
}
}
}
在prepare(for segue:, sender:)
中实施HomeFilterVCDelegate
和HomeVC
方法,并按如下所示更新代码。
HomeVC:
class HomeVC: UIViewController {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "HomeFilterVC" {
let collectionVC = segue.destination as! HomeFilterVC
collectionVC.delegate = self
}
}
}
extension HomeVC: HomeFilterVCDelegate {
func collectionViewDidTapped() {
navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(named: "cancel-music")?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(self.closeViewTapped)).
}
}
我希望这能解决您的问题。
答案 1 :(得分:1)
您可以如下更改按钮标题:
postgresql@9.5-main.service - PostgreSQL Cluster 9.5-main
Loaded: loaded (/lib/systemd/system/postgresql@.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since lun. 2019-06-10 12:04:22 CET; 1h 59min ago
Process: 2951 ExecStart=postgresql@%i --skip-systemctl-redirect %i start (code=exited, status=1/FAILURE)
juin 10 12:04:22 server-inprotec systemd[1]: Starting PostgreSQL Cluster 9.5-main...
juin 10 12:04:22 server-inprotec postgresql@9.5-main[2951]: Error: Config owner (inprotec:1000) and data owner (postgres:111) do not
juin 10 12:04:22 server-inprotec systemd[1]: postgresql@9.5-main.service: Control process exited, code=exited status=1
juin 10 12:04:22 server-inprotec systemd[1]: Failed to start PostgreSQL Cluster 9.5-main.
juin 10 12:04:22 server-inprotec systemd[1]: postgresql@9.5-main.service: Unit entered failed state.
juin 10 12:04:22 server-inprotec systemd[1]: postgresql@9.5-main.service: Failed with result 'exit-code'.
如果您知道那里已经有一个按钮,只是想更改标题,请使用下面的功能。
func changeBarButtonTitle() {
let leftitem = self.navigationItem.leftBarButtonItem!
let leftbutton = leftitem.customView as! UIButton
leftbutton.setTitle("<YOUR-TITLE>", for: .normal)
}
希望这将有助于更改条形按钮的标题!
答案 2 :(得分:1)
首先,在您的property
中为leftItem
创建一个ViewController
,将reference
保存到leftBarButtonItem
,即
class VC: UIViewController, UICollectionViewDelegate {
lazy var leftItem: UIBarButtonItem = {
let item = UIBarButtonItem(image: UIImage(named: "Initial Title")?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(closeViewTapped))
return item
}()
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationItem.leftBarButtonItem = self.leftItem
}
}
在上面的代码中,我最初在leftBarButtonItem
中添加了viewWillAppear(_:)
。由于我们将reference
保存到leftBarButtonItem
中的leftItem
中,因此可以使用leftItem
对其进行任何更改。
然后在您的collectionView(_:didSelectItemAt:)
中使用相同的property
来更改您的leftBarButtonItem's title
,即
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
self.leftItem.title = "Title at Index - \(indexPath.row)"
}