以编程方式更改(不是init)UIBarButtonItem标识符?

时间:2010-06-16 15:06:10

标签: iphone uibarbuttonitem

在IB中我可以将UIBarButtonItem的标识符设置为“play”,这会添加一个播放按钮的图像(右指三角形)。

有没有办法以编程方式更改此图片?我想在按下播放按钮时将其更改为“暂停”。

我知道你可以使用标识符初始化一个UIBarButtonItem,但我还没有找到一种在初始化后更改它的方法。这甚至可能吗?

我唯一能想到的就是删除旧按钮并在其位置初始化一个新按钮,但这似乎不太有效。

有什么想法吗?

3 个答案:

答案 0 :(得分:14)

好的,我已经用Google搜索了这个问题,然后遇到了sample code from Apple,他们做了完全相同的事情(在工具栏按钮上切换播放/暂停按钮图形)。但是,我们不使用UIBarButtonItem的内置播放和暂停标识符,而是使用自定义UIButton并切换自定义图片。

因此,如果Apple遇到在UIButton上创建和切换自定义图像而不是内置播放和暂停UIBarButtonItem按钮的麻烦,那么我认为可以非常安全地说,无法以编程方式更改标识符UIBarButtonItem

这是他们(Apple)在按下按钮时切换图像所做的事情:

// Call this when the button you want to toggle is pressed:
[playButton setImage:((p.playing == YES) ? pauseBtnBG : playBtnBG) forState:UIControlStateNormal];

将p.playing替换为您想要保持按钮状态的BOOL。 playButton是工具栏中的自定义UIButtonpauseBtnBGplayBtnBG是要切换的图片。

答案 1 :(得分:13)

这似乎运作得相当好:

UIBarButtonItem *oldButton = [myToolBar.items objectAtIndex:1];
[myToolBar setItems:[NSArray arrayWithObjects:[myToolBar objectAtIndex:0], [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemStop target:self action:@selector(tapStopRefreshButton:)],nil] animated:NO];
[oldButton release];

在这个例子中,我有一个用于UIWebView的工具栏,当有人点击重新加载时,我希望它改为停止。工具栏上只有一个灵活的空间,上面有一个按钮 - 右键对齐按钮 - 所以我抓住了对旧按钮的引用,使用与旧按钮相同的选择器创建了一个新按钮,重置了标签栏上的按钮,然后发布原始按钮。

不是最漂亮的,但你可以使用所有标准按钮,而不必覆盖按钮类。

答案 2 :(得分:0)

2个堆叠的工具栏怎么样?然后你可以在顶部有一些系统按钮,在底部有一些系统按钮。如果按下播放按钮,则只需隐藏顶部工具栏。