Interface Builder目标/操作中的UIGestureRecognizer

时间:2012-02-28 16:21:59

标签: ios interface-builder target gesture long-press

我正在为iPhone App设置UIGestureRecognizer。 我在InterfaceBuilder中将对象库中的Long Press Gesture Recognizer拖到必须接受手势的视图中。

在我以这种方式添加手势识别器之后,它具有指向应该接受手势的视图的引用插座集合。

然后在ViewController中添加一个指向GestureRecognizer的IBOutlet

IBOutlet UILongPressGestureRecognizer *gestRec;

以及手势识别器的相应操作

-(IBAction)longPress:(id)sender;

之后,Gesture Recognizer在界面构建器中显示出口和名为 longPress:的操作,其目标名为 ControlManager

但是当我在iPhoneSimulator中做长按手势时,我的程序崩溃了。当我对我的GestureRecognizer的描述进行NSlog时,它显示以下输出:

<UILongPressGestureRecognizer: 0x6859620; 
state = Possible; 
view = <UIView 0x6859e20>; 
target= <(action=longPress:, target=<ControlManager 0x6859af0>)>>

我认为问题出在最后一行,它应该是这样的:

target=<ControlManager 0x6859af0>; 
action=longPress:

我做错了吗?

1 个答案:

答案 0 :(得分:1)

你在.m中实现了 - (void)longPress:(UIGestureRecognizer)识别器吗? (我建议更新id - &gt; UIGestureRecognizer和发件人 - &gt;识别器; IBAction的typedef为void但你可能会将其显式化)

您肯定希望实现选择器,当方法(如果实现的话)与选择器不匹配时,这种类型的崩溃非常常见。即使错过结肠也可能导致不匹配。

另外,您是否设置了调试器以在引发异常时中断?如果没有,请转到调试器(左侧窗格左侧第6个“选项卡”),单击+添加新的“添加异常断点”,并保留默认值)。一旦引发异常,这将使您进入调试器,这通常是堆栈中的有用位置。

祝你好运,

达明