UIBarButtonItem无法点击

时间:2011-10-11 05:50:50

标签: iphone ios uibarbuttonitem

我尝试在不使用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];

}

由于

马克西姆

3 个答案:

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