我试图用一堆细胞填充一个uitableview,然后在滑动其中一个单元格时,只移动单个单元格以填充不同的笔尖。当我刷细胞时没有发生任何事情。以下是代码:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//below registers the nib's for the contact cell
let nib = UINib(nibName: "ContactCell", bundle: nil)
self.myTableView.register(nib, forCellReuseIdentifier: "cell")
let cell = myTableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! ContactCell
//below gets the index
var val = indexPath.row
//below assigns the values of the fields on the cell
cell.contactName.text = (name[val])
return cell
let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture))
swipeLeft.direction = .left
self.view.addGestureRecognizer(swipeLeft)
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture))
swipeRight.direction = .right
self.view.addGestureRecognizer(swipeRight)
return UITableViewCell()
}
以下是被调用的函数:
func handleGesture(gesture: UISwipeGestureRecognizer, indexNum: IndexPath) -> Void {
if gesture.direction == UISwipeGestureRecognizerDirection.right {
//sets the nib2 = to the cell for right swipe, which is then called in CellForRowAt
print("Swipe Right")
let nib2 = UINib(nibName: "RightOptionCell", bundle: nil)
self.myTableView.register(nib2, forCellReuseIdentifier: "cell2")
let cell2 = myTableView.dequeueReusableCell(withIdentifier: "cell2", for: indexNum) as! LeftOptionCell
}
else if gesture.direction == UISwipeGestureRecognizerDirection.left {
//display the leftoptioncell
print("Swipe Left")
let nib2 = UINib(nibName: "DropDownOptionsCell", bundle: nil)
self.myTableView.register(nib2, forCellReuseIdentifier: "cell2")
let cell2 = myTableView.dequeueReusableCell(withIdentifier: "cell2", for: indexNum) as! DropDownOptionsCell
}
}
在滑动细胞时没有任何操作,任何关于为什么会这样做的想法
答案 0 :(得分:0)
第一个问题是您要将手势识别器添加到视图中。这意味着它会检测视图中的滑动,而不会检测tableViewCells;这不一定是个问题,除了你需要做数学计算以确定哪个细胞被刷过。
第二个问题是你的处理程序的签名是错误的;处理程序可以不采用任何参数,也可以采用一个参数,它必须是手势识别器;你有一个索引路径,它不会起作用。
一般来说,处理这种情况的最常用方法是将滑动手势识别器放在tableViewCell中,并在刷卡时让单元通知其委托(应该是您的视图控制器)。然后,viewController修改你的模型,并使用动画来调用reloadCell,并触发cellForRowAt,它将根据你更新的模型提供一个新的单元格。