2011-03-26 102 views
2

以编程方式添加UIBarButtonItem的正确方法是什么?在我的情况下,我试图给rightBarButtonItem添加一个,我一直在围绕控制器层次结构跳跃,但我似乎无法让按钮出现在任何地方。如何以编程方式添加UIBarButtonItem?

这里是我当前的代码:

- (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获取图像文件的完整路径,而不仅仅是文件名。这可能是问题所在;它返回零,这导致整个按钮构造函数返回零。

(此外,你通过调用不释放或自动释放的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将被系统忽略。 (但不应该是它不工作的原因。)

+0

你真棒,我爱你。我从来不会猜到这是造成它失败的图像,我认为我没有使用正确的控制器层次结构。无论如何,感谢您的帮助,它现在可以工作,我也学到了一些东西。 :) – Gup3rSuR4c 2011-03-26 05:32:30

+2

@Alex也爱你。 – peterjb 2011-03-26 08:29:06