将UIImage设置为UIBarButton项目

我似乎无法添加图像到这个UIBarButtonItem没有碰撞碰撞时:

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil]; self.navigationItem.backBarButtonItem = backButton; [backButton release]; 

这个代码添加了一个图像,但是当它被触摸时,由于UIButton的UIBarButtonItem *分配的不兼容的指针types,它会崩溃:

  //Setup Custom Button UIButton *button = [[UIButton alloc] init]; button.frame = CGRectMake(0,0,44,44); // [button addTarget:self action:@selector(showInfo) forControlEvents:UIControlEventTouchUpInside]; self.navigationItem.backBarButtonItem = button; [button setBackgroundImage:imgIcon forState:UIControlStateNormal]; self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:button] autorelease]; [button release]; 

谢谢你的帮助

致电

 self.navigationItem.leftBarButtonItem = [CustomBarButton createNavBackBarButtonItemWithTitle:NSLocalizedString(@"Back", @"") target:self action:@selector(actionBack:)]; 

CustomBarButton具有createNavBackBarButtonItemWithTitle类function

 +(UIBarButtonItem *)createNavBackBarButtonItemWithTitle:(NSString *)t target:(id)tgt action:(SEL)a { UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; // Since the buttons can be any width we use a thin image with a stretchable center point UIImage *buttonImage = [[UIImage imageNamed:@"back_button_up.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:0]; UIImage *buttonPressedImage = [[UIImage imageNamed:@"back_button_over.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:0]; [[button titleLabel] setFont:[UIFont boldSystemFontOfSize:12.0]]; [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [button setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted]; //[[button titleLabel] setShadowOffset:CGSizeMake(0.0, 1.0)]; CGRect buttonFrame = [button frame]; buttonFrame.size.width = [t sizeWithFont:[UIFont boldSystemFontOfSize:12.0]].width + 24.0; buttonFrame.size.height = buttonImage.size.height; [button setFrame:buttonFrame]; [button setBackgroundImage:buttonImage forState:UIControlStateNormal]; [button setBackgroundImage:buttonPressedImage forState:UIControlStateHighlighted]; [button setTitle:[NSString stringWithFormat:@" %@",t] forState:UIControlStateNormal]; [button addTarget:tgt action:a forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; return [buttonItem autorelease]; } 

您必须将buttonStyle设置为custom而不是UIBarButtonItemStylePlain

然后[barbuttonitem setCustomView:anImageView];