【问题标题】:UIButton target not recognized when adding button superview controller to another viewController将按钮超级视图控制器添加到另一个视图控制器时,UIButton 目标无法识别
【发布时间】:2012-06-04 06:28:48
【问题描述】:

我创建了 UIViewController 的子类 toolbarViewController ,我在这个视图控制器中声明了一个 UIButton 并指定它的目标如下

UIButton *button = [[UIButton alloc]initWithFrame:myFrame];
[button addTarget:self action:@selector(doSomething) forContorlEvents:UIControlEventTouchUpInside];

然后我在不同的视图控制器中执行以下操作

toolbarViewController *toolbar = [[toolbarViewController alloc]init];
[self.view addSubview:toolbar.view];

问题是当我按下按钮时出现异常:无法识别的选择器(doSomething)发送到实例,我在这里做错了什么?

toolbarViewController.h 中的 doSomething 声明

-(void)doSomething;

在toolbarViewController.m中

-(void)doSomething{ NSLog("doSomething got called"); }

【问题讨论】:

  • 你实现doSomething方法了吗?如果是,在哪个班级?
  • 您的 doSomething 是否接受参数?能否请您出示您的 doSomething 定义?
  • 当然我实现了doSomething,我是在toolbarViewController类中实现的
  • 您的 addTarget:self 需要是您拥有 doSomething 方法的类 obj,例如 addTarge:yourCalassObj

标签: iphone objective-c ios uiviewcontroller uibutton


【解决方案1】:

检查doSomething 的声明。如果你声明像-(IBAction)doSomething:(id)sender 这样的 IBAction,你应该添加像

这样的选择器
[button addTarget:self action:@selector(doSomething:) forContorlEvents:UIControlEventTouchUpInside];

而不是

[button addTarget:self action:@selector(doSomething) forContorlEvents:UIControlEventTouchUpInside];

【讨论】:

  • 我将 doSomething 的定义更改为 (IBAction)doSomething:(id)sender 并且效果很好,谢谢
【解决方案2】:

如果你使用ARC,你分配toolbarViewController,但它有relese。你可以试试这个:

ViewController.h
@interface ViewController : UIViewController{
    toolbarViewController * toolbar;
}
@property(nonatomic,strong) toolbarViewController * toolbar;


ViewController.m
@synthesize toolbar = _toolbar;


    toolbar = [[toolbarViewController alloc]initWithNibName:@"toolbarViewController" bundle:[NSBundle mainBundle]];

你分配按钮可以做到这一点:

UIButton *bt = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        bt.frame = myFrame;
        [bt addTarget:self action:@selector(dosomething) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:bt];

【讨论】:

    【解决方案3】:

    一种可能的情况是,如果您将UITapGestureRecognizer 添加到UIButton 的超级视图。 在 iOS5 上,UITapGestureRecognizers 似乎存在问题,无法取消视图中的点击。

    所以你需要做的就是设置

    tapGesture.cancelsTouchesInView = NO;
    

    如果有帮助请告诉我!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多