我尝试在不使用xib文件的情况下创建视图。 不幸的是,我在开发早期遇到了问题。
我只想添加一个navigationBar和一个OK按钮。 一切似乎都没问题,但在模拟器中,当我点击按钮时,没有任何反应。 没有调用选择器,似乎也没有到达按钮(没有改变方面)。
如果您可以查看我的代码,那会有所帮助。
-(void)loadView {
//Set view background
UIImageView * backView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:MM_BACKGROUND]] autorelease];
[self setView:backView];
//Set navigationBar
UINavigationBar* navBar = [[[UINavigationBar alloc] initWithFrame:CGRectZero] autorelease];
navBar.frame = CGRectMake(0, 0, 320, 44);
navBar.tintColor = [UIColor clearColor];
navBar.barStyle = UIBarStyleBlackTranslucent;
UINavigationItem* navBarTitle = [[[UINavigationItem alloc] initWithTitle:@"My title"] autorelease];
UIBarButtonItem* backButton = [[[UIBarButtonItem alloc] initWithTitle:@"OK" style:UIBarButtonItemStyleBordered target:self action:@selector(onTouchBackButton)] autorelease];
navBarTitle.leftBarButtonItem = backButton;
[navBar pushNavigationItem:navBarTitle animated:NO];
[self.view addSubview:navBar];
}
由于
马克西姆
答案 0 :(得分:1)
您的视图控制器的视图是 UIImageView 。默认情况下, UIImageView的用户交互处于禁用状态。因此它也禁用了所有子视图的用户交互(这就是按钮不响应触摸的原因)。你必须明确设置,
backView.userInteractionEnabled = YES;
答案 1 :(得分:0)
您能提供onTouchBackButton
选择器的代码吗?
但只是猜测,也许您应该将代码更改为...action:@selector(onTouchBackButton:)] autorelease];
请注意:的存在,因为IBAction
需要arg (id) sender
。
答案 2 :(得分:0)
Maxime Capelle,
试试这段代码,
UIImage* image = [UIImage imageNamed:@"back.png"];
CGRect frame = CGRectMake(0, 0, image.size.width, image.size.height);
UIButton* backgbtn = [[UIButton alloc] initWithFrame:frame];
[backgbtn setBackgroundImage:image forState:UIControlStateNormal];
[backgbtn setShowsTouchWhenHighlighted:YES];
[backgbtn addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem* backBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backgbtn];
[self.navigationItem setLeftBarButtonItem:backBarButtonItem];
[backBarButtonItem release];
[backgbtn release];