如何以编程方式添加 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?的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式在Swift中添加UIBarButtonItem操作
将弹出框添加到以编程方式添加的 UIBarButtonItem 并将图像添加到相同的弹出框 Swift