带有 UITableView 的 UISwipeGestureRecognizer 自定义操作
UISwipeGestureRecognizer Custom Action with UITableView
我正在尝试添加滑动手势 (left/right) 以便 hide/show 我的侧边菜单。
我让它在 UIView 上完美运行,但是,我在 UITableView 上遇到了问题。
这是我将滑动手势添加到 TableView 的代码:
// Add right swipe gesture recognizer
let rightSwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: "toggleSideMenu")
rightSwipeGestureRecognizer.direction = UISwipeGestureRecognizerDirection.Right
self.timelineTableView.addGestureRecognizer(rightSwipeGestureRecognizer)
// Add left swipe gesture recognizer
let leftSwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: "toggleSideMenu")
leftSwipeGestureRecognizer.direction = UISwipeGestureRecognizerDirection.Left
//sideMenuContainerView.addGestureRecognizer(rightSwipeGestureRecognizer)
self.timelineTableView.addGestureRecognizer(leftSwipeGestureRecognizer)
这是我的选择器方法:
func toggleSideMenu() {
println("ENTER SWIPE")
toggleSideMenuView()
}
我也这样做过:
func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
return UITableViewCellEditingStyle.None
}
func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
return false
}
但是,当我向左或向右滑动时,我的选择器菜单 "toggleSideMenu()" 从未被调用。
P.S:我也试过直接在我的 UITableViewCell 上添加这些滑动手势,但它也不起作用。
有人有想法吗?非常感谢您的宝贵时间!
感谢基里特·莫迪。这是我的问题的解决方案:
添加:
leftSwipeGestureRecognizer.delegate = self
rightSwipeGestureRecognizer.delegate = self
然后添加 UIGestureRecognizerDelegate 委托方法:
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
return true
}
对我有帮助
(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
因为我有两个手势。一张来自幻灯片菜单,一张来自当前 VC。因此,幻灯片菜单中的一个取消了 VC 的手势。
我正在尝试添加滑动手势 (left/right) 以便 hide/show 我的侧边菜单。 我让它在 UIView 上完美运行,但是,我在 UITableView 上遇到了问题。
这是我将滑动手势添加到 TableView 的代码:
// Add right swipe gesture recognizer
let rightSwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: "toggleSideMenu")
rightSwipeGestureRecognizer.direction = UISwipeGestureRecognizerDirection.Right
self.timelineTableView.addGestureRecognizer(rightSwipeGestureRecognizer)
// Add left swipe gesture recognizer
let leftSwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: "toggleSideMenu")
leftSwipeGestureRecognizer.direction = UISwipeGestureRecognizerDirection.Left
//sideMenuContainerView.addGestureRecognizer(rightSwipeGestureRecognizer)
self.timelineTableView.addGestureRecognizer(leftSwipeGestureRecognizer)
这是我的选择器方法:
func toggleSideMenu() {
println("ENTER SWIPE")
toggleSideMenuView()
}
我也这样做过:
func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
return UITableViewCellEditingStyle.None
}
func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
return false
}
但是,当我向左或向右滑动时,我的选择器菜单 "toggleSideMenu()" 从未被调用。
P.S:我也试过直接在我的 UITableViewCell 上添加这些滑动手势,但它也不起作用。
有人有想法吗?非常感谢您的宝贵时间!
感谢基里特·莫迪。这是我的问题的解决方案:
添加:
leftSwipeGestureRecognizer.delegate = self
rightSwipeGestureRecognizer.delegate = self
然后添加 UIGestureRecognizerDelegate 委托方法:
func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
return true
}
对我有帮助
(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
因为我有两个手势。一张来自幻灯片菜单,一张来自当前 VC。因此,幻灯片菜单中的一个取消了 VC 的手势。