如何创建(alloc / initwithImage)UIBarButtonItem?

时间:2011-07-29 12:14:21

标签: iphone objective-c

这是使用图像分配和初始化UIBarButton项目的正确方法吗?

UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]initWithImage:@"back_topbtn.png" style:UIBarButtonItemStyleDone target:nil action:nil];

3 个答案:

答案 0 :(得分:3)

这不是正确的方法,你没有使用图片对象,你把图像名称放在这里。所以这会向你显示警告

UIBarButtonItem *barBtn = [[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"back_topbtn.png"] style:UIBarButtonItemStyleDone target:nil action:nil] autorelease];

这是使用它的正确方法,当你没有声明任何动作时,这只是一个图像。所以声明任何动作(使用选择器)。

答案 1 :(得分:2)

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *btnImg = [UIImage imageNamed:@"some_image-name"];
[btn setImage:btnImg forState:UIControlStateNormal];
btn.frame = CGRectMake(0, 0, btnImg.size.width, btnImg.size.height);
[btn addTarget:self action:@selector(whatever) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn];

答案 2 :(得分:1)

正确的方法是使用UIImage。在- initWithNibName:bundle:方法中执行此操作是有意义的。

以下是向右添加图像按钮的示例。请注意,点击按钮时会调用myButtonTapped:,请务必执行它。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.title = @"My title";

        UIBarButtonItem *myButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"myimage.png"] style:UIBarButtonItemStylePlain target:self action:@selector(myButtonTapped:)];
        self.navigationItem.rightBarButtonItem = myButton;
        [myButton release];
    }
    return self;
}