iOS 13 Segmented Control: Remove swipe gesture to select segment
I upgraded @Aystub's answer. You can only allow UITapGestureRecogniger to select a segment.
class NoSwipeSegmentedControl: UISegmentedControl {
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if(gestureRecognizer.isKind(of: UITapGestureRecognizer.self)){
return false
}else{
return true
}
}
}
I have a similar setup (UISegmentedControl
inside a UIScrollView
bc it's too long and the client didn't want to compress the content to fit). This worked for me (Built on Xcode 11.1):
class NoSwipeSegmentedControl: UISegmentedControl {
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return true
}
}
Then set the class of my UISegmentedControl
to that. In my app this only prevents the swipe-to-select gesture on UISegmentedControl
objects embedded within a UIScrollView
. If it is not in a UIScrollView
nothing behaves any differently. Which makes sense because gestureRecognizerShouldBegin()
returns true
by default. So why this allows the UIScrollView
to take priority on the swipe gesture, I have no idea. But hope it helps.