如何以编程方式添加UIBarButtonItem?

时间:2011-03-26 04:26:06

标签: objective-c ios uinavigationitem

以编程方式添加UIBarButtonItem的正确方法是什么?在我的情况下,我正在尝试向rightBarButtonItem添加一个,我一直在控制器层次结构中跳跃,但我似乎无法让按钮显示在任何地方。

这是我目前的代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.navigationItem setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithImage:[[UIImage alloc] initWithContentsOfFile:@"Barcode-White.png"] style:UIBarButtonItemStylePlain target:self action:@selector(scanEquipment:)] autorelease]];
}

我希望有人能引导我走向正确的方向。我试图从中调用它的控制器是3级。所以,UITabBarController - > UIViewController (Settings, 1st level) - > UIViewController (Vehicle, 2nd level) - > UIViewController (Inventory, 3rd level)

无论如何,提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

[[UIImage alloc] initWithContentsOfFile:@"Barcode-White.png"]可能无效。 initWithContentsOfFile获取图像文件的完整路径,而不仅仅是文件名。那可能是个问题;它返回nil,导致整个按钮构造函数返回nil。

(另外,你通过在没有发布或自动释放的情况下调用init方法来泄漏这个图像。)

尝试使用[UIImage imageNamed:@"Barcode-White"],它会在应用资源中查找图像文件,并且只需加载图像一次,然后将其缓存在内存中,无论它被调用多少次,都会有额外的好处:

http://developer.apple.com/library/ios/documentation/uikit/reference/UIImage_Class/Reference/Reference.html#//apple_ref/occ/clm/UIImage/imageNamed

除此之外,它看起来应该有用......

此外,导航栏项的样式始终为UIBarButtonItemStyleBordered。尝试将其设置为UIBarButtonItemStylePlain将被系统忽略。 (但不应该是它不起作用的原因。)