【问题标题】:Segue from TableView into another Tableview using gesture使用手势从 TableView 转到另一个 Tableview
【发布时间】:2018-07-20 18:35:06
【问题描述】:

我有 FirstTableView (TableView),它由具有图像和标签的单元格填充。如果用户点击标签,我想进入另一个表视图(SecondTableView),它将使用前一个表视图中的标签作为路径(文件夹名)来搜索该文件夹中的图像并将它们显示为单元格。

我有一些代码片段一起编写,但我不太确定在哪里传递 perform segueprepare for segue 函数。

这是我的 FirstTableViewController 的扩展,它填充了 FirstTableView 的单元格:

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 的函数。

FirstTableViewCells

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 函数以及哪个 T​​ableViewController 应该是单元协议的委托。

第二个表视图

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。我不确定我应该在哪里给他们打电话。 我也不确定手势协议的代表应该在哪里。

谢谢。

【问题讨论】:

    标签: ios swift uitableview segue swift-protocols


    【解决方案1】:

    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
      }
    }
    

    【讨论】:

    • 谢谢。传递数据怎么样?我想传递所选单元格的标签。
    • 如果发件人是 FirstTableViewCell (func func1(sender: FirstTableViewCell)) 我收到 does not conform to protocol 错误消息。如果我将其更改为any,则错误似乎消失了。我不确定这是否会有所不同。在看到结果之前,我必须处理另一个错误(构建后的错误)。
    • 将协议方法更改为 func func1(sender:FirstTableViewCell)
    猜你喜欢
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多