Swift中如何为无Cell的TableView添加左滑返回手势
解决方案
问题出在你把左滑手势识别器添加到了tableView上——当tableView没有Cell时,只有tableView的内容区域(几乎不存在)能触发手势,控制器的空白区域无法响应。只需要把手势加到控制器的根视图上,就能让整个屏幕都支持左滑返回:
修改后的代码
class CommentVC: UIViewController, UIGestureRecognizerDelegate { override func viewDidLoad() { super.viewDidLoad() self.navigationController?.interactivePopGestureRecognizer?.delegate = self self.navigationController?.interactivePopGestureRecognizer?.isEnabled = true // 将手势添加到控制器的根视图,而非tableView // 修正变量名,避免方向和名称混淆 let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture)) swipeLeft.direction = .left // 设置代理,处理可能的手势冲突 swipeLeft.delegate = self self.view.addGestureRecognizer(swipeLeft) } @objc func respondToSwipeGesture(gesture: UIGestureRecognizer) { guard let swipeGesture = gesture as? UISwipeGestureRecognizer else { return } switch swipeGesture.direction { case .left: print("Swiped left") self.navigationController?.popViewController(animated: true) default: break } } func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { return true } }
关键修改点
- 手势添加对象变更:从
self.tableView改为self.view,让控制器的整个视图区域都能接收左滑手势,包括tableView空白区、控制器其他空白部分。 - 变量名优化:把
swipeRight改成swipeLeft,和手势方向对应,避免代码混淆。 - 代理设置:给自定义手势设置
delegate = self,配合shouldRecognizeSimultaneouslyWith方法,确保和导航栏原生侧滑手势可以同时工作,不会互相干扰。
这样不管tableView有没有Cell,你在屏幕任何位置左滑都能触发返回操作了。
内容的提问来源于stack exchange,提问作者new dev
相关产品推荐
相关产品推荐

