我有FirstTableView(TableView),它由具有图像和标签的单元格填充。如果用户点击标签,我想进入另一个tableview(SecondTableView),它将使用前一个tableview中的标签作为路径(foldername)来搜索该文件夹中的图像并将其显示为单元格。
我把代码的位和段写在一起,但是我不太确定在哪里传递perform segueprepare for segue函数。
下面是FirstTableViewController的扩展,它填充FirstTableView的单元格:
第一个表视图

extension FirstTableViewController: UITableViewDelegate, UITableViewDataSource{

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return dataCells.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

            let folderCell = dataCells[indexPath.row]
            let cell = tableView.dequeueReusableCell(withIdentifier: "FirstTableCell") as! FirstTableViewCell
        cell.setCell(cell:folderCell)

        return cell

        }
}

这是FirstTAbleViewCell的代码。注意,我已经创建了UITapGestureRecognizer常量和protocol。如果点击FolderLabel,我想进入下一个tableview。
func setCell只是填充FirstTableViews的函数。
第一个TableViewCells
import UIKit

protocol LabelCellDelegate {
    func func1(sender:Any)
}



    class FirstTableViewCell: UITableViewCell {


        @IBOutlet weak var ImageView: UIImageView!
        @IBOutlet weak var FolderLabel: UILabel!

        var delegate: LabelCellDelegate?
        override func awakeFromNib() {
            super.awakeFromNib()

            FolderLabel.isUserInteractionEnabled = true
            let recognizer = UITapGestureRecognizer(target: self, action:Selector(("handleTap:")))
            recognizer.numberOfTapsRequired = 1
            self.FolderLabel.addGestureRecognizer(recognizer)
        }

        func handleTap(recognizer: UITapGestureRecognizer){
            delegate!.func1(sender: self)
        }
        func setCell (cell : FolderCell){
            self.ImageView.image = cell.image
            self.FolderLabel.text = cell.label
        }
    }

接下来是SecondTableViewController
不知怎的,在从FirstTableView点击单元格后,我想得到被点击的标签名,并将该名用作搜索目录。
获取目录中的所有图像,并在SecondTableView的单元格中将其显示为图像。我不太确定应该在哪里调用gesture函数,以及哪个TableViewController应该是cell协议的委托。
第二个表视图
import UIKit

class SecondTableViewController: UIViewController {
    var Imagefiles: [String] //Imagefiles String. This are all images from tapped folder label.
    var CellObjects: [folderCell] // Cellobjects to fill the cells. contains images and image names.

     // need to get folder name from FirstTableViewCell how?



    override func viewDidLoad() {
        super.viewDidLoad()
        imageFiles = getImageObjects(folder: Foldercell) //how to get access to folderCell???????
        cellObjects = createArray(imageFiles: imageFiles)
        }

    func getImageObjects(folder: FolderCell) -> imageFiles: String {
        //FUNCTION To search tapped label and grab all image file paths.


    func createArray(imageFiles: string)-> tempArray: [folderCell]{
         //We use this function to take the image files from above function and
         //create cell objects to populate our cells
       //in SecondTableView




        }
      }



}

}



  extension ViewController: LabelCellDelegate{
        func1(folderLabel : String) {
        return folderLabel


        }
    }

extension LablesTableView:UITableViewDataSource,UITableViewDelegate{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return CellObjects.count
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cellFolderObject = folderObjects[indexPath.row]
        let cell = tableView.dequeueReusableCell(withIdentifier: "SecondCell") as! LabelCell
         let folderCell = CellObjects[indexPath.row]

        cell.setCell(cell: folderCell)

        return cell

如你所见,我还没有给perform segueprepare for segue打电话。我不知道该给他们打电话。
我也不确定手势协议的代表应该在哪里。
谢谢您。

最佳答案

内部cellForRowAt集合

cell.delegate = self

//
然后在VC的委托函数中(符合协议LabelCellDelegate
extension FirstTableViewController:LabelCellDelegate {
   func func1(sender: FirstTableViewCell) {
      self.performSegue(withIdentifier: "goToSecond", sender:sender.FolderLabel.text!)
  }
}

//
从这里触发VC方法
func handleTap(recognizer: UITapGestureRecognizer){
  delegate!.func1(sender: self)
}

//
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  if let secondController = segue.destination as? SecondTableViewController {
     secondController.sendedStr = sender as! String
  }
}

08-26 17:28