当用户在单元格上执行长按手势时,我正在尝试更新UITableViewCell的边框,但它没有更新。
这是我的cellForRowAtIndexPath:
方法
let objLongPressHandler = UILongPressGestureRecognizer(target: self, action: #selector(self.longPressHandler(_:)))
objLongPressHandler.view?.tag = indexPath.row
objLongPressHandler.delegate = self
objLongPressHandler.enabled = true
objLongPressHandler.minimumPressDuration = 0.1
cell.contentView.addGestureRecognizer(objLongPressHandler)
这是我的函数UILongPressGestureRecognizer
函数。
func longPressHandler(objGesture: UILongPressGestureRecognizer) {
let center = objGesture.view?.center
let rootViewPoint = objGesture.view!.superview?.convertPoint(center!, toView: self.tableView)
let indexPath = self.tableView.indexPathForRowAtPoint(rootViewPoint!)
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath!) as! GroupTableViewCell
cell.contentView.layer.borderColor = UIColor.redColor().CGColor
cell.contentView.layer.borderWidth = 3
cell.setNeedsLayout()
}
答案 0 :(得分:2)
tableView.indexPathForRowAtPoint
将位置转换为表格视图坐标。通过调用override func viewDidLoad() {
super.viewDidLoad()
// Install tap gesture recogniser on main view.
let gesture = UILongPressGestureRecognizer(target: self, action: #selector(self.longPressHandler(_:)))
gesture.enabled = true
gesture.minimumPressDuration = 0.1
view.addGestureRecognizer(gesture)
}
func longPressHandler(gesture: UILongPressGestureRecognizer) {
// Get the location of the gesture relative to the table view.
let location = gesture.locationInView(tableView)
// Determine the row where the touch occurred.
guard let selectedIndexPath = tableView.indexPathForRowAtPoint(location) else {
return
}
// Iterate through all visible rows.
guard let indexPaths = tableView.indexPathsForVisibleRows else {
return
}
for indexPath in indexPaths {
// Get the cell for each visible row.
guard let cell = tableView.cellForRowAtIndexPath(indexPath) else {
continue
}
// If the index path is for the selected cell, then show the highlighted border, otherwise remove the border.
let layer = cell.contentView.layer
if indexPath == selectedIndexPath {
layer.borderColor = UIColor.redColor().CGColor
layer.borderWidth = 3
}
else {
layer.borderWidth = 0
}
cell.setNeedsLayout()
}
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 10
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
cell.textLabel?.text = "Cell #\(indexPath.row)"
return cell
}
获取所选行。 示例:
.myClass table td:nth-child(2){
background-color:red;
}