Dưới đây là một giải pháp khá hoàn chỉnh cho này mà tôi chỉ thực hiện:
Thứ nhất, xác định vars để giữ cả hai nút:
@property (weak, nonatomic) IBOutlet UIToolbar *toolbar;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *playButton;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *pauseButton;
(hiểu biết của tôi ở đây là thanh công cụ là một ref yếu vì nó đang được xác định thông qua IB và nó có một con trỏ mạnh mẽ với nó, nhưng các nút play/pause là những con trỏ mạnh bởi vì chúng ta đang tạo chúng bên dưới.Nhưng fu của tôi là một chút yếu trên mặt trận này như một newbie khá, do đó sửa chữa được đánh giá cao.)
Thứ hai, tôi n IB chỉ tạo một nút phát (không có nút tạm dừng) và buộc nó vào nút playButton ở trên.
Thứ ba, thiết lập phương pháp này:
- (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];
}
}
Thứ tư, gọi setAsPlaying bất cứ nơi nào bạn đang đi chơi hay chế độ tạm dừng. Ví dụ:
-(IBAction) playAudio:(id)sender
{
[self.audioPlayer play];
[self setAsPlaying:YES];
}
-(IBAction) pauseAudio:(id)sender
{
[self.audioPlayer pause];
[self setAsPlaying:NO];
}
Bạn đã thử với '==' thay vì '='? ... dù sao tôi sẽ sử dụng cờ bool ivar để kiểm tra xem âm thanh có đang phát hay không. – Mat
oh xin lỗi! cảm ơn rất nhiều, tôi sẽ kiểm tra nó và đến với bạn sau. –
Tôi đã kiểm tra nó, nhưng nó không hoạt động.Không thể truy xuất –