我创建了一个名为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"); }
答案 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;
让我知道它是否有帮助!