在 XIB 中添加手势时,iOS 应用程序崩溃并显示消息“-[UITapGestureRecognizer setFrame:]”
Posted
技术标签:
【中文标题】在 XIB 中添加手势时,iOS 应用程序崩溃并显示消息“-[UITapGestureRecognizer setFrame:]”【英文标题】:iOS App crashes with message "-[UITapGestureRecognizer setFrame:]" when adding Gesture in XIB 【发布时间】:2015-08-29 10:14:25 【问题描述】:将手势添加到自定义视图 (XIB) 时,我的应用程序崩溃。我使用的是 Xcode 6.4 版。
以下是我使用点击手势添加自定义子视图的步骤:
在我的项目中添加了一个 XIB 和一个 UIView 子类 (MyView)。并将 XIB 类设置为 MyView。
使用 Interface Builder 向 MyView 添加了 TapGesture
创建 MyView 对象 (myView) 并使用 [addSubview:myView]
将其添加为子视图。
当我运行应用程序时,它崩溃了
删除了 XIB 中的 TapGesture 并再次运行,没有任何问题。
代码:
[[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] firstObject];
日志:
-[UITapGestureRecognizer setFrame:]:无法识别的选择器发送到实例 0x7f924a4ce910
有时候是这样的,
-[UITapGestureRecognizer superview]:无法识别的选择器发送到实例 0x7f924a4ce910
请指教。
【问题讨论】:
您的 MyView 实现类的 awakeFromNib 或 drawRect 中是否有一些代码。您似乎正在尝试在 TapGesture 上设置框架。 是的 awakeFromNib 在那里。但没有在那里设置任何框架。 您可以尝试在 MyView 的 awakeFromNib 中添加您的轻触手势。只是为了检查 xib 中是否有问题。 使用代码添加手势时有效。但我想知道我的代码/xib 有什么问题。 @pawan:感谢您的建议。我通过添加一些额外的代码行解决了这个问题。我将添加这个问题的答案。 【参考方案1】:我通过替换代码解决了这个问题,
[[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] firstObject];
与
MyView *myView = nil;
NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil];
for (id object in objects)
if ([object isKindOfClass:[MyView class]])
myView = object;
注意:
如果XIB只有一个UIView
对象,那么上面提到的单行代码就足够了。但是如果XIB中有多个UIView
对象或者XIB中添加了任何Gestures,那么我们需要从loadNibNamed:owner:options:
方法返回的数组中找出MyView
对象。
【讨论】:
以上是关于在 XIB 中添加手势时,iOS 应用程序崩溃并显示消息“-[UITapGestureRecognizer setFrame:]”的主要内容,如果未能解决你的问题,请参考以下文章
iOS 9:在故事板/xib 中设置了手势识别器,以添加到多个视图(不起作用)
在 iOS14 上释放 wkwebview 时,发送手势事件导致崩溃
将 UITapGestureRecognizer 添加到 XIB