переключаться между UIBarButtonSystemItemPlay и UIBarButtonSystemItemPause - PullRequest
3 голосов
/ 30 января 2012

Имеют два элемента UIBarButtonItem, которые хотят сделать его одним UIBarButtonItem и переключаться между ними

UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc]
                               initWithBarButtonSystemItem:UIBarButtonSystemItemPlay 
                               target:self 
                               action:@selector(playaudio:)];

systemItem1.style = UIBarButtonItemStyleBordered;

UIBarButtonItem *systemItem2 = [[UIBarButtonItem alloc] 
                               initWithBarButtonSystemItem:UIBarButtonSystemItemPause
                               target:self
                               action:@selector(pause:)];

systemItem2.style = UIBarButtonItemStyleBordered;


// flex item used to put space in between buttons

UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] 
                             initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                             target:nil
                             action:nil];

//Add buttons to the array

NSArray *toolbarItems = [NSArray arrayWithObjects: settingsButton, flexItem, systemItem, flexItem, systemItem1,flexItem, systemItem2, flexItem, systemItem3, flexItem, modalBarButtonItem, nil];

 [toolbar setItems:toolbarItems];

[settingsButton release];
[systemItem  release];
[systemItem1 release];
[systemItem2 release];
[systemItem3 release];
[modalBarButtonItem release];
[flexItem release];

-(void) playaudio: (id) sender {

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"theme" 
                                                     ofType:@"mp3"];

NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:filePath];

audioPlayer = [[AVAudioPlayer alloc] 
                    initWithContentsOfURL:fileURL error:nil];
audioPlayer.currentTime = 0;
[audioPlayer play];
[fileURL release];  

}

- (void)pause: (id)sender {

if

([audioPlayer isPlaying])

{[audioPlayer pause];} 

else 

{[audioPlayer play];}

}

Любые идеи, как мне это сделать.

Ответы [ 2 ]

5 голосов
/ 30 января 2012

По сути, каждый раз, когда статус воспроизведения / паузы обновляется, вы захотите запустить метод обновления панели инструментов.Нечто подобное должно работать.Вы можете создать такой метод:

-(void)playPause{
      if(audioPlayer == nil){
          NSString *filePath = [[NSBundle mainBundle] pathForResource:@"theme" ofType:@"mp3"];
          NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:filePath];
          audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];
          audioPlayer.currentTime = 0;
          [fileURL release];
      }
      UIBarButtonSystemItem buttontype = UIBarButtonSystemItemPlay;
      if([audioPlayer isPlaying]){
          [audioPlayer pause];
      }
      else {
          [audioPlayer play];
          buttontype = UIBarButtonSystemItemPause;
      }
      UIBarButtonSystemItem *item = [[[UIBarButtonItem alloc]
                           initWithBarButtonSystemItem:buttontype 
                           target:self 
                           action:@selector(playPause)] autorelease];
      self.toolbar.items = [NSArray arrayWithObject:item];
}
4 голосов
/ 30 января 2012

У меня было гораздо более простое решение этой проблемы:

- (void) setStartStopButton:(BOOL)startorstop
{
    UIBarButtonItem *startStopButton = nil;
    if (startorstop == YES) {
        startStopButton = [[UIBarButtonItem alloc]     initWithBarButtonSystemItem:UIBarButtonSystemItemPause target:self action:@selector(startStopAction:)];
    }
    else
    {
        startStopButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:self action:@selector(startStopAction:)];
    }
    self.navigationItem.rightBarButtonItem = startStopButton;
    [startStopButton release];
}

- (IBAction)startStopAction:(id)sender
{
    if (task.isActive) 
    {
        [task stopTask];
    }
    else
    {
        [task startTask];
    }
    [self setStartStopButton:task.isActive];
}

И затем я вызываю первый метод для установки кнопки в viewWillAppear, а также для установки кнопки до того, как вид появится на экране.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...