无法在UIBarButtonItem上设置操作

所以我添加了一堆自定义UIBarButtonItems到一个UIToolbar,他们都加载得很好,看起来不错,我可以看到他们在我的UIToolbar。 唯一的问题是,我不能对他们执行任何操作。 在我的viewDidLoad中,我设置了一切。 这里是我的.h和.m文件:

.h文件:

#import <UIKit/UIKit.h> #import <MobileCoreServices/MobileCoreServices.h> #import <QuartzCore/QuartzCore.h> @interface PhotoEditViewController : UIViewController <UIPopoverControllerDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate, UIGestureRecognizerDelegate> { IBOutlet UIImageView *imageView; } - (IBAction)cancelEdit:(id)sender; - (IBAction)savePhoto:(id)sender; - (IBAction)chooseColor:(id)sender; @property (retain) IBOutlet UIToolbar *editBar; @property (retain) UIImageView *imageView; @property (retain) UIImage *tempImage; - (void) setupStache; @end 

.m文件:(viewDidLoad)

 #pragma mark - View lifecycle - (void)viewDidLoad { [super viewDidLoad]; self.imageView.image = tempImage; NSMutableArray *toolbarItems = [NSMutableArray arrayWithCapacity:3]; // get the filepaths of all the images NSString *imagePath_cancel = [[NSBundle mainBundle] pathForResource:@"barBtnPhotoEditCancel" ofType:@"png"]; NSString *imagePath_save = [[NSBundle mainBundle] pathForResource:@"barBtnSavePhoto" ofType:@"png"]; NSString *imagePath_color = [[NSBundle mainBundle] pathForResource:@"barBtnChangeColor" ofType:@"png"]; // get the images UIImage *cancelImage = [[UIImage alloc] initWithContentsOfFile:imagePath_cancel]; UIImage *saveImage = [[UIImage alloc] initWithContentsOfFile:imagePath_save]; UIImage *changeColorImage = [[UIImage alloc] initWithContentsOfFile:imagePath_color]; // set the images to the UIBarButtonItem(s) CGRect cancelFrame = CGRectMake(0, 0, cancelImage.size.width-25, cancelImage.size.height-25); UIButton* cancelButton = [[UIButton alloc] initWithFrame:cancelFrame]; [cancelButton setBackgroundImage:cancelImage forState:UIControlStateNormal]; [cancelButton setShowsTouchWhenHighlighted:YES]; UIBarButtonItem *cancelBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:cancelButton]; [cancelBarButtonItem setTarget:self]; [cancelBarButtonItem setAction:@selector(cancelEdit:)]; CGRect saveFrame = CGRectMake(0, 0, saveImage.size.width-25, saveImage.size.height-25); UIButton* saveButton = [[UIButton alloc] initWithFrame:saveFrame]; [saveButton setBackgroundImage:saveImage forState:UIControlStateNormal]; [saveButton setShowsTouchWhenHighlighted:YES]; UIBarButtonItem* saveBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:saveButton]; [saveBarButtonItem setTarget:self]; [saveBarButtonItem setAction:@selector(savePhoto:)]; CGRect colorFrame = CGRectMake(0, 0, changeColorImage.size.width-25, changeColorImage.size.height-25); UIButton* colorButton = [[UIButton alloc] initWithFrame:colorFrame]; [colorButton setBackgroundImage:changeColorImage forState:UIControlStateNormal]; [colorButton setShowsTouchWhenHighlighted:YES]; UIBarButtonItem* colorBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:colorButton]; [colorBarButtonItem setTarget:self]; [colorBarButtonItem setAction:@selector(chooseColor:)]; // add all the items [toolbarItems addObject:cancelBarButtonItem]; [toolbarItems addObject:saveBarButtonItem]; [toolbarItems addObject:colorBarButtonItem]; [self.editBar setItems:toolbarItems animated:NO]; // release everything [cancelBarButtonItem release]; [cancelButton release]; [saveBarButtonItem release]; [saveButton release]; [colorBarButtonItem release]; [colorButton release]; } - (IBAction)cancelEdit:(id)sender { NSLog(@"Pressing the cancel button"); } - (IBAction)savePhoto:(id)sender { NSLog(@"Pressing the save button"); } - (IBAction)chooseColor:(id)sender { NSLog(@"Pressing the choose color button"); } 

所以,这是答案。

我插入了一个自定义子视图,它是整个屏幕(320×640)的大小。 它还附带了gestureRecognizers。 因此,无论何时点击该视图,gestureRecognizer都会响应附加的子视图,而不是uitoolbar或其上的button。 我是愚蠢的人。 调整UIView上的图像,一切工作正常。 :)谢谢大家的帮助。

initWithCustomView – 视图必须是button,并在button上设置操作