不能在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

。(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");    
}

那么,这就是答案。

我正在插入一个自定义子视图,它是整个屏幕的大小(320x640)。它还附带了手势识别器。因此,每当我点击那个视图时,gestureRecognizer就会响应附加的子视图,而不是工具栏或上面的按钮。伙计,我真傻。在UIView上调整图像的大小,一切都很好。:)谢谢大家的帮助。

initWithCustomView - view必须为button,并设置button上的action

最新更新