将按钮超级视图控制器添加到另一个viewController时,无法识别UIButton目标

时间:2012-06-04 06:28:48

标签: iphone objective-c ios uiviewcontroller uibutton

我创建了一个名为toolbarViewController的UIViewController子类,我在这个视图控制器中声明了一个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"); }

3 个答案:

答案 0 :(得分:1)

检查doSomething的声明。如果你宣布IBAction类似-(IBAction)doSomething:(id)sender,你应该添加像

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

而不是

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

答案 1 :(得分:1)

如果你使用ARC,你可以分配toolbarViewController,但是它已经被释放了。你可以试试这个:

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];

答案 2 :(得分:0)

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

所以你需要做的就是设置

tapGesture.cancelsTouchesInView = NO;

让我知道它是否有帮助!