无法看到我的导航栏自定义按钮,但它是可点击的

时间:2011-03-08 00:37:26

标签: iphone objective-c uinavigationbar

我想在导航栏中添加一个自定义按钮(右侧)。

我的“viewDidLoad”函数中有以下代码:

UIButton *audioBtn = [[UIButton alloc] init];
[audioBtn setTitle:@"Play" forState:UIControlStateNormal];

UIImage *buttonImage = [UIImage imageNamed:@"play.png"];
[audioBtn setBackgroundImage:buttonImage forState:UIControlStateNormal];

[audioBtn addTarget:self action:@selector(toggleAudioPlayback:) forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithCustomView:audioBtn];
self.navigationItem.rightBarButtonItem = button;

[audioBtn release];
[button release];

我在导航栏中看不到按钮,但是如果我点击右边(按钮应该在哪里),它会触发“toggleAudioPlayback”功能,所以唯一的问题是我没有看到按钮!

我尝试使用不同的图像,设置背景颜色,没有任何效果......

顺便说一下,我在代码中的其他地方使用这个图像,我看到它(在自定义按钮上,但不在导航栏中)。

请帮帮我!

2 个答案:

答案 0 :(得分:2)

让您的生活更轻松,而不是使用自定义图像的UIBarButtonItem而不是自定义视图:

    UIBarButtonItem *audioBtn = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"play.png"] style:UIBarButtonItemStylePlain target:self action:@selector(toggleAudioPlayback:)];
    self.navigationItem.rightBarButtonItem = audioBtn;
    [audioBtn release];

<强>更新

由于您已经表明您希望按钮没有边框,因此您需要使用CustomView,但我已修改您的代码以使其工作(关键区别在于框架的分配,设置为图像的大小,但您可以将其设置为自定义大小,使图像居中)

UIButton *audioBtn = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *playImg = [UIImage imageNamed:@"play.png"];
[audioButton setBackgroundImage:playImg forState:UIControlStateNormal];
[audioButton setBackgroundImage:playImg forState:UIControlStateHighlighted];
audioBtn.frame = CGRectMake(0,0,playImg.size.width,playImg.size.height);
[audioBtn addTarget:self action:@selector(toggleAudioPlayback:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithCustomView:audioBtn];
self.navigationItem.rightBarButtonItem = button;
[audioBtn release];
[button release];

答案 1 :(得分:0)

而不是[[UIButton alloc] init]尝试使用UIButton上的+buttonWithType:方法。