Как я могу вернуться к предыдущему ViewController из UICollectionViewCell? - PullRequest
1 голос
/ 26 сентября 2019

В Main.storyboard есть две страницы (контроллеры представления): FirstViewController и SecondViewController.Я добавил кнопку в FirstViewController.Вот область нажатия кнопки:

    let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MainPage") as! SecondViewController
    controller.modalPresentationStyle = .fullScreen
    show(controller, sender: nil)

Я добавил UICollectionView в SecondViewController.Также добавлено UICollectionViewCell (с файлом .xib). Я добавил кнопку назад в файл .xib.И я хотел написать ниже код для действия кнопки «Назад» (пожалуйста, укажите func btnBack)

import UIKit

class ViewCell: UICollectionViewCell {

@IBOutlet weak var lblOutlet: UILabel!
@IBOutlet weak var contentViewOutlet: UIView!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

@IBAction func btnBack(_ sender: UIButton) {
    present(controller, animated: true, completion: nil)
}
}

, но, как вы знаете, ViewCell не имеет разрешения на удаление.То, что я пытаюсь сделать, это вернуться к FirstViewController с этой кнопкой назад в UICollectionViewCell.И да, пользователь приложения видит эту кнопку возврата в каждой записи коллекции пользовательского интерфейса.

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

Может быть, вы можете использовать шаблон протокола и делегата для возврата из второго контроллера представления.Вы можете добавить в свой файл CollectionViewCell протокол, подобный

protocol popBackDelegate { 
    func popBack()
}

, а затем внедрить его в свой CollectionViewCell

var popBackDelegate: popBackDelegate!

После этого вы можете вызвать его в действии btnBack

popBackDelegate.popBack()

Теперь вам нужно привязать его к событию cellforitem представления второго контроллера представления

cell.popBackDelegate = self

Наконец, вы можете настроить функцию протокола в вашем контроллере представления и вернуться к ней.

НадеемсяЯ помог тебе с этим.

0 голосов
/ 26 сентября 2019

Я бы предложил добавить обратный вызов в ViewCell для такого маленького взаимодействия, как показано ниже:

class ViewCell: UICollectionViewCell {

@IBOutlet weak var lblOutlet: UILabel!
@IBOutlet weak var contentViewOutlet: UIView!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

public var dismiss: (()-> Void)? = nil

@IBAction func btnBack(_ sender: UIButton) {
    self.dismiss?()
}
}

Теперь, в вашей ViewController привязке, что callback внутри cellForItemAt as,

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell: ViewCell = // Your code to dequeue cell
    cell.dismiss = { [weak self] in
         self?.dismiss(animated: true, completion: nil) // OR Pop whatever
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...