簡體   English   中英

如何從xib tableview Cell推送ViewController?

[英]how to push ViewController from xib tableview Cell?

我在collectionView中有tableView,並且是使用xib創建的。 我想在選擇item時使用pushViewController。我嘗試在itemForRowAt方法中推送視圖控制器,但這是不可能的

class SecondTableView: UITableViewCell , UIcollectionViewDelegate ,UICollectionViewDataSource {


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

//        let vc = DataTableViewController()
//        vc.delegate = self
//        vc.pushNav()

        let memeVC = storyboard?.instantiateViewController(withIdentifier: "MemeViewController") as! MemeViewController
        memeVC.imagePassed = image
        navigationController?.pushViewController(memeVC, animated: true)
          print("item tapped\(indexPath)")
    }
}

錯誤使用未解決的標識符“ storyboard”; 您是說“ UIStoryboard”嗎?

如圖片中所述添加segue並選擇show

在此處輸入圖片說明

如圖所示,在情節提要中設置segue標識符

在協議下方添加:

protocol CollectionViewCellDelegate: class {
    func userDidTap()
}

在集合視圖委托返回的表視圖類中添加以下屬性。

weak var delegate: CollectionViewCellDelegate?

更新委托方法

 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
              delegate.userDidTap()
              print("item tapped\(indexPath)")
        }
    }

確認CollectionViewCellDelegate委托到您的第一個視圖控制器並添加此方法:

func userDidTap() {
    performSegue(withIdentifier: "showMemeViewController", sender: nil)
}

在第一個VC中添加為segue做准備。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showMemeViewController" {
            let memeVC: MemeViewController = segue.destination as! MemeViewController
            memeVC.imagePassed = image
        }
    }

請嘗試此操作,如果您遇到任何其他問題,請通知我。 謝謝。

您嘗試訪問的tableview單元中的storyboard屬性首先沒有出現,它是一個UIViewController屬性而不是一個UITableViewCell屬性,因此出現錯誤,您必須將選擇委托給viewController,然后讓控制器正常執行segue。

您可以如上所述通過委托開始進行此操作,例如,如果要將圖像傳遞給想要選擇的控制器:

protocol ImageTableViewCellDelegate: class {
    // pass the the image or any variable you want in the func params
    func userDidTap(_ image: UIImage)
}

然后將其添加到單元格中並確認其控制器

class SecondTableView {
  weak var delegate: ImageTableViewCellDelegate?
}

在您的控制器中:

extension MyViewController: ImageTableViewCellDelegate {
    func userDidTap(_ image: UIImage){
        let memeVC = storyboard?.instantiateViewController(withIdentifier: "MemeViewController") as! MemeViewController
        memeVC.imagePassed = image
        navigationController?.pushViewController(memeVC, animated: true)
          print("item tapped\(indexPath)")
     }

}

這應該可行,如果您還有其他問題,請告訴我

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM