Изменение заголовка кнопки левой панели при выборе ячейки коллекции в представлении контейнера - PullRequest
0 голосов
/ 10 июня 2019

У меня есть представление коллекции в представлении контейнера. В представлении коллекции у меня есть две части: UICollectionReusableView и UICollectionViewCell. Внутри UICollectionReusableView снова у меня есть представление коллекции, и при выборе ячейки из этой ячейки я должен изменить LeftNavigationBarTitle. Я попробовал приведенный ниже код в didSelectItem представления коллекции, но ничего не происходит.

navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(named: "cancel-music")?.withRenderingMode(.alwaysOriginal), style: .plain, target: self, action: #selector(self.closeViewTapped)).

Я использовал приведенный выше код, но он не изменил навигационную кнопку.

Это мой дизайн storyBoard.
Любая ошибка в моем коде, пожалуйста, помогите мне получить точную. Thankyou.

Ответы [ 3 ]

3 голосов
/ 10 июня 2019

Создайте метод протокола для контроллера представления, который содержит представление коллекции.

Внутри 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 голос
/ 10 июня 2019

Прежде всего, создайте 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)"
}
1 голос
/ 10 июня 2019

Вы можете изменить заголовок кнопки, как показано ниже:

func changeBarButtonTitle() {
    let leftitem = self.navigationItem.leftBarButtonItem!
    let leftbutton = leftitem.customView as! UIButton
    leftbutton.setTitle("<YOUR-TITLE>", for: .normal)
}

Также, если вы знаете, что кнопка уже есть и просто хотите изменить заголовок, используйте функцию ниже.

func changeBarButtonTitle() {

        if let leftitem = self.navigationItem.leftBarButtonItem {
            print("Left Button")
            leftitem.title = "test-left"
        }

        if let rightitem = self.navigationItem.rightBarButtonItem {
            print("Right Button")
            rightitem.title = "test-right"
        }
    }

Надеюсь, что этоПоможет изменить заголовок кнопки бара!

...