我使用操作创建了tableView单元格,并且需要执行该操作才能知道所选单元格的indexPath。我不知道如何将indexPath作为参数传递给操作或如何找到其他方法。这是tableView cellForRowAt的代码和要执行的操作:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "menuCell", for: indexPath) as! CustomCell
    cell.foodName.text = self.menuItems[indexPath.row]
    //adding gesture recognizer with action Tap to cell
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(Tap(gesture:index:IndexPath.row)))
    cell.addGestureRecognizer(tapGesture)
    return cell
}

func Tap(gesture: UIGestureRecognizer , index: Int){
    print("Tap")
    //necessary so that the page does not open twice
    //adding the rating view
    let ratingVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "rating") as! RatingView
    ratingVC.foodName = selectedItem
    self.addChildViewController(ratingVC)
    ratingVC.view.frame = self.view.frame
    self.view.addSubview(ratingVC.view)
    ratingVC.didMove(toParentViewController: self)
}


我不知道如何将IndexPath.row作为参数传递给Tap。

最佳答案

您不必执行选择单元格的功能,UITableViewDelegate已经具有这种行为。

通过遵循UITableViewDelegate并实现tableView(_:didSelectRowAt:)方法,您将能够获取所选单元格的indexPath.row


  告诉代表现在已选择指定的行


因此,在实现tableView(_:didSelectRowAt:)之后,您应该摆脱tapGesture功能,它应类似于:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "menuCell", for: indexPath) as! CustomCell
    cell.foodName.text = self.menuItems[indexPath.row]

    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("Selected row: \(indexPath.row)")
}

关于ios - 在Swift中将参数传递给 Action 函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42099696/

10-15 10:56