从嵌套在TableViewCell中的CollectionViewCell中呈现ViewController

时间:2017-09-25 12:08:54

标签: ios swift uitableview uicollectionview presentviewcontroller

如何在嵌套在TableViewCell中的CollectionViewCell中呈现ViewController,并且TableViewCell位于ViewController中?

我尝试了presentViewControllerperformSegue,但无法在单元格内调用它们。

详细说明:

我有三个文件。

  1. ProfileViewController
  2. PeopleCategoryTableViewCell
  3. PeopleCategoryCollectionViewCell
  4. 当有人在CollectionViewCell中点击故事时,我希望他们重定向到另一个ViewController,即SinglePostVC()

    我尝试过:

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        print("inside this")
        self.window?.rootViewController?.present(SinglePostVC(), animated: true, completion: nil)
        print("outside this")
    }
    

2 个答案:

答案 0 :(得分:1)

像这样使用协议和委托

tableViewCell

protocol CellDelegate {
    func colCategorySelected(_ indexPath : IndexPath)
}

var delegate:CellDelegate?

在didSelect中

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    delegate?.colCategorySelected(indexPath)
}

在你的ProfileViewController

class HomeVC: UIViewController , UITableViewDelegate, UITableViewDataSource, CellDelegate{
:
:

func colCategorySelected(_ indexPath : IndexPath){
    // Push here
  }
:
:
}

别忘了

cellForRow

   let Cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! tableCell

     Cell.delegate = self // dont forget this line.
     return Cell

答案 1 :(得分:0)

您可以从PeopleCategoryCollectionViewCell发出通知并在ProfileViewController中侦听它,然后您通常可以呈现视图控制器。

本地通知教程:https://useyourloaf.com/blog/local-notifications-with-ios-10/

示例:

NSNotificationCenter
        .defaultCenter()
        .postNotificationName(kCellTappedKey, object: nil, userInfo: nil)

然后听:

notificationCenter.addObserver(self,
                                   selector: #selector(self.onCellTapped(_:)),
                                   name: kDocumentCellTappedKey,
                                   object: nil)

并添加此功能:

func onCellTapped(notification: NSNotification) { //call perform segue }