如何以编程方式添加 UIBarButtonItem?

Posted

技术标签:

【中文标题】如何以编程方式添加 UIBarButtonItem?【英文标题】:How to add a UIBarButtonItem programmatically? 【发布时间】:2011-03-26 04:26:05 【问题描述】:

以编程方式添加 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】:

[[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 将被系统忽略。 (但不应该是它不起作用的原因。)

【讨论】:

你很棒,我爱你。我永远不会猜到是图像导致它失败,我以为我没有使用正确的控制器层次结构。无论如何,感谢您的帮助,它现在有效,我学到了一些东西。 :)

以上是关于如何以编程方式添加 UIBarButtonItem?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式添加UIBarButtonItem

以编程方式在Swift中添加UIBarButtonItem操作

将弹出框添加到以编程方式添加的 UIBarButtonItem 并将图像添加到相同的弹出框 Swift

如何以编程方式禁用/启用UIBarButtonItem

如何以编程方式将自定义图像设置为 UIBarButtonItem

以编程方式添加到导航栏的UIBarButtonItem无法调用选择器,而添加到工具栏的按钮确实如此