[英]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.