I am trying to creating check list in a table view. Inside table view radio button and UILabel, here adding swipe gesture to UILabel. For single swipe of UILabel will show radio button or double swipe of UILabel will show dash line.
I have tried of adding gesture to UILabel inside table by using selector method, it print successfully but UILabel is not swiping.
Here is the code tried of swiping UILabel:
In viewDidLoad:
let gestureRec = UISwipeGestureRecognizer(target: self, action: #selector(didTap(sender:)))
tableView.addGestureRecognizer(gestureRec)
gestureRec.delegate = self as? UIGestureRecognizerDelegate
And created function called didTap:
@objc func didTap(sender : UISwipeGestureRecognizer)
{
if sender.state == .ended {
let location = sender.location(in: self.tableView)
let indexPath = self.tableView.indexPathForRow(at: location)
var cell = self.tableView.cellForRow(at: indexPath!) as! textCell
print("swipe")
cell.labelView.frame(forAlignmentRect: CGRect(x: 10, y: 8, width: 20,
height: 15))
}
}
The first thing I noticed is that you are adding the gesture on
UITableView
and notUILabel
. So you need to fix that first.Secondly, for a gesture to work correctly on a control, you must enable the user interaction property of that control, else it won't respond to the gesture. So :
You can add the gesture as follows :
Try this code. Tested and working fine 100 %
See the output
Additional: If you want to detect which row's label was tapped, then assign a tag to the label in cellForRowAt like
And get the row index in the function labelSwipedLeft using
I would suggest adding swipe gesture in cell class, rather than
ViewController
.call
setupGestures
inawakeFromNib
. Also if you want to drag the label, use pan gesture