滑动手势不会更改UITableViewCell

时间:2017-11-23 22:01:02

标签: ios swift uitableview

我试图用一堆细胞填充一个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
        }
    }

在滑动细胞时没有任何操作,任何关于为什么会这样做的想法

1 个答案:

答案 0 :(得分:0)

第一个问题是您要将手势识别器添加到视图中。这意味着它会检测视图中的滑动,而不会检测tableViewCells;这不一定是个问题,除了你需要做数学计算以确定哪个细胞被刷过。

第二个问题是你的处理程序的签名是错误的;处理程序可以不采用任何参数,也可以采用一个参数,它必须是手势识别器;你有一个索引路径,它不会起作用。

一般来说,处理这种情况的最常用方法是将滑动手势识别器放在tableViewCell中,并在刷卡时让单元通知其委托(应该是您的视图控制器)。然后,viewController修改你的模型,并使用动画来调用reloadCell,并触发cellForRowAt,它将根据你更新的模型提供一个新的单元格。