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

neb*_*ebs 10 iphone uibarbuttonitem

在IB中,我可以将UIBarButtonItem的标识符设置为"play",其中添加了播放按钮的图像(右指向三角形).

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

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

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

有什么想法吗?

neb*_*ebs 14

好吧,我已经用Google搜索了这个问题,并从Apple 中搜索了示例代码,它们完全相同(在工具栏按钮上切换播放/暂停按钮图形).但是,UIBarButtonItem他们使用自定义UIButton和切换自定义图像,而不是使用内置播放和暂停标识符.

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

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

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

将p.playing替换为您想要保持按钮状态的BOOL. playButtonUIButton工具栏中的自定义. pauseBtnBG并且playBtnBG是要切换的图像.


小智 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];
Run Code Online (Sandbox Code Playgroud)

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

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