【问题标题】:UIGestureRecognizer overriding "long presses" in UITableViewControllerUIGestureRecognizer 覆盖 UITableViewController 中的“长按”
【发布时间】:2011-12-28 09:17:33
【问题描述】:
我正在使用UIGestureRecognizer 类的-(NSUInteger)numberOfTouches 方法来计算UITableViewController 中的触摸次数。 (my earlier question)
虽然我能够正确地计算它们,但它以这样一种方式覆盖了触摸事件,即 tableView 的 didSelectRowAtIndexPath 方法仅在非常短的点击时被调用。
长按时,单元格会突出显示,但不会触发 didSelectRowAtIndexPath。
请指导应该做什么。
谢谢。
【问题讨论】:
标签:
iphone
ios
uigesturerecognizer
【解决方案1】:
有几件事可以尝试。首先,您的直接问题是手势识别器可能正在等待查看您是否要添加点击/触摸以满足其触发要求。您还可以添加一个调用您的 didSelectRowAtIndexPath 的长触摸识别器,但我会首先观看 2010 年关于手势识别器的非常好的 WWDC 会议,因为您是付费开发人员,这会让您很好地了解如何正确实现多个手势识别器,以便它们在您需要时触发。
【解决方案2】:
从 viewDidLoad() 调用它,我也为 monotouch 实现了这段代码,它提供了关于 longPressGestureRecognizer 的想法。
void AddGestureRecognizersToImage (UIImageView imgView)
{
var longPressGesture = new UILongPressGestureRecognizer (this, new Selector
("ShowResetMenu"));
imgView.AddGestureRecognizer (longPressGesture);
}
[Export("ShowResetMenu")]
void ShowResetMenu (UILongPressGestureRecognizer gestureRecognizer)
{
if (gestureRecognizer.State == UIGestureRecognizerState.Began)
{
var menuController = UIMenuController.SharedMenuController;
var resetMenuItem = new UIMenuItem ("Reset", new Selector ("ResetImage"));
var location = gestureRecognizer.LocationInView (gestureRecognizer.View);
BecomeFirstResponder ();
menuController.MenuItems = new [] { resetMenuItem };
menuController.SetTargetRect (new RectangleF (location.X, location.Y, 2, 2), gestureRecognizer.View);
menuController.MenuVisible = true;
imageForReset = gestureRecognizer.View;
}
}