我正在使用UIBarButtonSystemItemPlay播放我的音频文件,我想在点击它时动态更改它的样式。有可能吗?如果有,请帮助我。这是我的代码,其中_playPause是UIBarButtonSystemItemPlay的IBOutlet。提前谢谢。
- (IBAction)playPause:(UIBarButtonItem *) sender
{
if (_playPause.style == UIBarButtonSystemItemPlay)
{
[_playPause setStyle:UIBarButtonSystemItemPause];
[audio play];
}
else
{
[_playPause setStyle:UIBarButtonSystemItemPlay];
[audio pause];
}
}
答案 0 :(得分:5)
UIBarButtonSystemItemPlay
或UIBarButtonSystemItemPause
。 style的类型为UIBarButtonItemStyle
。
查看文档here。
我建议创建两个不同的UIBarButtonItem
,然后交替启用或禁用(例如)它们。也可以删除当前的可见按钮并添加一个具有不同UIBarButtonSystemItem
的新按钮。
答案 1 :(得分:2)
这是我刚刚实施的一个非常完整的解决方案:
首先,定义变量来保存两个按钮:
@property (weak, nonatomic) IBOutlet UIToolbar *toolbar;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *playButton;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *pauseButton;
(我的理解是工具栏是一个弱参考,因为它是通过IB定义的,它有一个强大的指针,但是播放/暂停按钮是强指针,因为我们在下面创建它们。但是我的作为一个相当新手,福在这方面有点弱,所以修正得到了赞赏。)
其次,在IB中只创建一个播放按钮(没有暂停按钮)并将其绑定到上面的playButton var。
第三,设置此方法:
- (void) setAsPlaying:(BOOL)isPlaying
{
self.rootViewController.playing = isPlaying;
// we need to change which of play/pause buttons are showing, if the one to
// reverse current action isn't showing
if ((isPlaying && !self.pauseButton) || (!isPlaying && !self.playButton))
{
UIBarButtonItem *buttonToRemove = nil;
UIBarButtonItem *buttonToAdd = nil;
if (isPlaying)
{
buttonToRemove = self.playButton;
self.playButton = nil;
self.pauseButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPause
target:self
action:@selector(pauseAudio:)];
buttonToAdd = self.pauseButton;
}
else
{
buttonToRemove = self.pauseButton;
self.pauseButton = nil;
self.playButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay
target:self
action:@selector(playAudio:)];
buttonToAdd = self.playButton;
}
// Get the reference to the current toolbar buttons
NSMutableArray *toolbarButtons = [[self.toolbar items] mutableCopy];
// Remove a button from the toolbar and add the other one
if (buttonToRemove)
[toolbarButtons removeObject:buttonToRemove];
if (![toolbarButtons containsObject:buttonToAdd])
[toolbarButtons insertObject:buttonToAdd atIndex:2]; // vary this index to put in diff spots in toolbar
[self.toolbar setItems:toolbarButtons];
}
}
第四,无论你打算在哪里玩或暂停模式,都要调用setAsPlaying。例如:
-(IBAction) playAudio:(id)sender
{
[self.audioPlayer play];
[self setAsPlaying:YES];
}
-(IBAction) pauseAudio:(id)sender
{
[self.audioPlayer pause];
[self setAsPlaying:NO];
}
答案 2 :(得分:0)
我相信一旦最初设置了样式(即在界面构建器中或在代码中创建按钮时),您无法更改它。
您唯一的选择是删除代码中的按钮,并使用不同的样式在其位置创建一个新按钮。你可以调用这个方法:
- (id)initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style target:(id)target action:(SEL)action
有关UIBarButtonItem
的更多信息,请查看this。
答案 3 :(得分:0)
是的,一旦设置完毕,你就无法改变“风格”(它实际上并没有被称为风格)。
是的,你可以制作另一个修复它的按钮。
以下是可重复使用的代码:
UIBarButtonItem *newButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
target:controller.navigationItem.rightBarButtonItem.target
action:controller.navigationItem.rightBarButtonItem.action];
controller.navigationItem.rightBarButtonItem = newButton;
此处,控制器通常为self
。