我使用操作创建了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/