【问题标题】:UIButton in a custom UIView troubleUIButton 在自定义 UIView 的麻烦
【发布时间】:2011-07-03 00:41:32
【问题描述】:

我有一个简单的(基于视图的)应用程序。我想点击自定义 UIView 我的按钮移动到该视图内的某个位置(例如指向 10,10)。

  1. 我的自定义 UIView 是 DrawView(DrawView.h 和 DrawView.m)。
  2. RotatorViewController(h. 和 .m)。

我在我的 DrawView 中添加了一个 UIButton,并与我的 DrawView 和 UIButton 连接。我在 RotatorViewController 和 @selector(tap:) 中添加了 UITapGestureRecognizer。 这是 UITapGestureRecognizer 的代码

- (void)viewDidLoad { [超级视图DidLoad]; UIGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc] initWithTarget:drawView action:@selector(tap:)]; [drawView addGestureRecognizer:tapGR]; [tapGR 发布]; }

@selector(点击:)

-(无效)点击:(UITapGestureRecognizer *)手势{ myButton.transform = CGAffineTransformMakeTranslation(10, 10); }

但是当我点击 DrawView 应用程序中的任何位置时,它会崩溃。这是来自控制台的日志

2011-02-23 20:59:24.897 Rotator[7345:207]-[DrawView tap:]:无法识别的选择器发送到实例 0x4d0fa80 2011-02-23 20:59:24.900 Rotator[7345:207] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[DrawView tap:]:无法识别的选择器发送到实例 0x4d0fa80”

我需要你的帮助

【问题讨论】:

    标签: iphone objective-c ios4 uiview uigesturerecognizer


    【解决方案1】:

    错误表明DrawView 类的实例不响应tap: 消息。我看到您在DrawView.m 中定义了一个tap: 方法,但是您有没有在标题中声明该方法?像这样:

    DrawView.h

    @class UITapGestureRecognizer;
    @interface DrawView {
        UIButton *myButton;
    }
    - (void) tap:(UITapGestureRecognizer *)gesture;
    @end
    

    【讨论】:

    • 不,似乎选择器不需要在头文件中声明。谢谢你的想法!
    【解决方案2】:

    你说:

    UITapGestureRecognizer 在 RotatorViewController 和 @选择器(点击:)

    你写道: UIGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc] initWithTarget:drawView action:@selector(tap:)];

    这意味着操作是在 drawView 委托中执行的,但是您在 RotatorViewController 中定义了选择器 tap:

    我认为您只需将目标 drawView 替换为 self

    UIGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      相关资源
      最近更新 更多