0

我想创建一个自定义图像的 barbutton,所以我创建了一个子类 UIBarButtonItem。

    @implementation UIBar

+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image target:(id)target action:(SEL)action{

    UIImage *menuButtonImage = [UIImage imageNamed:@"Camera.jpg"];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setImage:menuButtonImage forState:UIControlStateNormal];
    button.frame = CGRectMake(0, 0, menuButtonImage.size.width, menuButtonImage.size.height);
    UIBarButtonItem *menuButton = [[UIBarButtonItem alloc] initWithCustomView:button];
    [button addTarget:self action:@selector(takePicture) forControlEvents:UIControlEventTouchUpInside];


  //  self->navigationItem.rightBarButtonItem = menuButton;

    [UIViewController release];
}

但是我上线的错误是:

 self.navigationItem.rightBarButtonItem = button;

struct objc_class 类型的不完整定义

此错误是否与我的类未正确初始化有关?我是 Objective-C 的新手。

谢谢你的帮助。

4

2 回答 2

0

在您的类别方法中,您没有返回任何 UIBarButtonItem 实例。尝试返回 menuButton。

而且我不确定为什么需要调用 UIViewController 的类方法。例如,该方法不是类方法。也删除该行。

+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image target:(id)target action:(SEL)action{

    UIImage *menuButtonImage = [UIImage imageNamed:@"Camera.jpg"];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setImage:menuButtonImage forState:UIControlStateNormal];
    button.frame = CGRectMake(0, 0, menuButtonImage.size.width, menuButtonImage.size.height);
    UIBarButtonItem *menuButton = [[UIBarButtonItem alloc] initWithCustomView:button];
    [button addTarget:self action:@selector(takePicture) forControlEvents:UIControlEventTouchUpInside];
    return menuButton; 
}
于 2013-06-06T08:54:55.833 回答
0

如果您想要自定义栏按钮,那么您可以在 viewController 的 viewDidLoad 方法中使用以下代码。

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:buttonImage forState:UIControlStateNormal];
button.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
[button addTarget:self action: @selector(takePicture)forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = customBarItem;

如果你想继承 UIBarButtonItem 那么你可以执行以下操作。

@implementation UIBar

+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image target:(id)target action:(SEL)action
{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setImage:image forState:UIControlStateNormal];
    button.frame = CGRectMake(0, 0, image.size.width, image.size.height);
    UIBarButtonItem *menuButton = [[UIBarButtonItem alloc] initWithCustomView:button];
    [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];

    return menuButton;
}

并在您的 viewController viewDidLoad 方法中执行以下操作

 UIBar *customBarItem = [UIBar barItemWithImage:buttonImage target:self action:@selector(takePicture)];
 self.navigationItem.leftBarButtonItem = customBarItem;

这两种方法都行。

于 2013-06-06T09:00:59.573 回答