在XIB中添加Gesture时,iOS应用程序崩溃并显示消息“ - [UITapGestureRecognizer setFrame:]”

将Gesture添加到自定义视图(XIB)时,我的应用程序崩溃了 . 我正在使用Xcode版本6.4 .

以下是我使用点按手势添加自定义子视图时所遵循的步骤:

  • 在我的项目中添加了XIB和UIView子类(MyView) . 并将XIB类设置为MyView .

  • 使用Interface Builder为MyView添加了TapGesture

  • 创建了MyView对象(myView)并使用 [addSubview:myView] 将其添加为子视图 .

  • 当我运行应用程序时,它崩溃了

  • 删除了XIB中的TapGesture并再次运行,没有任何问题 .

Code:

[[[NSBundle mainBundle] loadNibNamed:@"MyView" owner:self options:nil] firstObject];

Log:

  • [UITapGestureRecognizer setFrame:]:无法识别的选择器发送到实例0x7f924a4ce910

有时这样,

  • [UITapGestureRecognizer superview]:无法识别的选择器发送到实例0x7f924a4ce910

请指教 .

回答(1)

3 years ago

我通过替换代码解决了这个问题,

[[[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;
  }
}

Note:

如果XIB只有一个 UIView 对象,那么上面提到的单行代码就足够了 . 但是如果XIB在XIB中添加了多个 UIView 对象或任何手势,那么我们需要从 loadNibNamed:owner:options: 方法返回的数组中找出 MyView 对象 .