Iphone 以编程方式更改(而不是初始化)UIBarButtonim标识符?

Iphone 以编程方式更改(而不是初始化)UIBarButtonim标识符?,iphone,uibarbuttonitem,Iphone,Uibarbuttonitem,在IB中,我可以将UIBarButtonItem的标识符设置为“play”,这会添加一个播放按钮的图像(直角三角形) 有没有办法以编程方式更改此图像?我想在按下播放按钮时将其更改为“暂停” 我知道你可以用一个标识符来初始化uibarbuttonite,但我还没有找到一种方法在它被初始化后改变它。这可能吗 我能想到的唯一一件事就是移除旧按钮并在其位置初始化一个新按钮,但这似乎很难奏效 有什么想法吗?好的,我用谷歌搜索了这个问题,结果发现他们做了完全相同的事情(在工具栏按钮上切换播放/暂停按钮图形)

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

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

我知道你可以用一个标识符来初始化uibarbuttonite,但我还没有找到一种方法在它被初始化后改变它。这可能吗

我能想到的唯一一件事就是移除旧按钮并在其位置初始化一个新按钮,但这似乎很难奏效


有什么想法吗?

好的,我用谷歌搜索了这个问题,结果发现他们做了完全相同的事情(在工具栏按钮上切换播放/暂停按钮图形)。但是它们不使用内置的播放和暂停标识符
UIBarButtonItem
,而是使用自定义的
UIButton
和切换自定义图像

因此,如果苹果在UIButtonim上创建和切换自定义图像而不是内置的play和pause
UIBarButtonim
按钮时遇到麻烦,那么我认为可以肯定地说,没有办法通过编程更改
UIBarButtonim
的标识符

这是他们(苹果)在按下按钮时切换图像的操作:

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

用任何你想保持按钮状态的布尔来代替p.playing
playButton
是工具栏中的自定义
ui按钮
pauseBtnBG
playBtnBG
是要切换的图像。

这似乎很有效:

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的工具栏,当有人单击“重新加载”时,我希望它更改为“停止”。工具栏上只有一个灵活的空间和一个按钮-右对齐按钮-因此我抓取了一个对旧按钮的引用,使用与旧按钮相同的选择器创建了一个新按钮,重置选项卡栏上的按钮,然后释放原始按钮


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

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

Apple在StitchedStreamPlayer示例中做到了这一点:虽然技术上不会在OP之后“更改”UIBarButtonSystemItem
,但此答案确实允许用另一个系统项替换一个系统项。尽管在本示例中,新的
UIBarButtonItem
应该在放入阵列之前进行初始化,以便可以正确释放。为什么需要抓住并释放旧按钮?我看不出有什么原因。非常感谢您的解决方案!他希望更改图像或交换按钮,而不是让工具栏消失。@但是,如果工具栏消失,显示给用户的按钮将改变。此外,在这些情况下,通常没有一个按钮,而是一组必须更改的按钮,因此我发现使用标准UIBarButtonim更容易拥有两个不同的工具栏,而不是创建和切换自定义UIButtonim。也更容易“隐藏”视图。但你是对的,这不是问题的答案,而是提问者问题的答案。