2012-02-28 54 views
0

我正在为iPhone App设置UIGestureRecognizer。 我在InterfaceBuilder中将长按手势识别器从对象库拖到必须接受手势的视图中。InterfaceBuilder中的UIGestureRecognizer目标/操作

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

然后在视图控制器我添加一个IBOutlet指向GestureRecognizer

IBOutlet UILongPressGestureRecognizer *gestRec; 

和手势识别相应的动作

-(IBAction)longPress:(id)sender; 

因此,手势识别器显示界面后Builder中的出口和动作名为longPress:,目标名称为ControlManager

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

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

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

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

难道我做错了什么?

+0

你实现长按:在ControlManager?你能发布崩溃日志吗? – Felix 2012-02-28 16:37:32

+0

是的,我喜欢。崩溃日志如下: - [__ NSCFString longPress:]:无法识别的选择器发送到实例0x686a8d0 – BartoNaz 2012-02-28 19:31:51

+0

也许你在代码中添加另一个目标,一个字符串。这将解释错误信息和崩溃。手势识别器描述看起来没问题。请注意,手势识别器可以有多个目标/动作。 – Felix 2012-02-28 23:27:54

回答

1

您是否在.m中实现了 - (void)longPress:(UIGestureRecognizer)识别器? (我建议更新ID - > UIGestureRecognizer和发件人 - >识别器; IBAction是typedef无效,但你可以明确)

你一定要实现选择器,这种类型的崩溃是非常普遍的方法(如果实施的话)与选择器不匹配。即使错过了冒号也可能导致错配。

另外,你有没有设置调试器,以便在发生异常时中断?如果没有,转到调试器(左起第六个“选项卡”,点击+添加一个新的,添加异常断点,并保持默认值)。一旦引发异常,这会将你推入调试器,这通常是一个有用的位置。

祝你好运,

达明

+0

我按照你的说法修好了,但它仍然不起作用。如果我将IBAction更改为void,则此操作在InterfaceBuilder中将不可用,对吧? – BartoNaz 2012-02-28 19:40:49

+0

我犯了一个错误。 InterfaceBuilder中的目标名称不是ViewController,而是ControlManager中的识别器描述 - 但它是UIViewController的一个实例。 – BartoNaz 2012-02-28 19:42:07

+0

所以你应该编辑问题并纠正错误 – Felix 2012-02-28 23:29:13