Управлять звуком с помощью главного контроллера просмотра из UITableViewController, используя @protocol?

#protocols #uitableview #avaudioplayer #popover

#протоколы #uitableview #avaudioplayer #всплывающее окно

Вопрос:

Хорошо, вот сценарий:

Я использую AVAudioPlayer.

Я пытаюсь выбрать и воспроизвести песню из UITableView, которая отображается как всплывающее окно.

Ресурсы mp3 расположены в каталоге «Мои документы».

Я могу заполнить табличное представление и при выборе строки воспроизвести этот конкретный ресурс.

Чего я не могу сделать, так это управлять звуком после исчезновения всплывающего окна с элементами управления, которые находятся на моем главном контроллере просмотра. (воспроизведение/остановка/громкость)

У меня есть @protocol, который делает всплывающее окно делегатом, может ли кто-нибудь помочь мне с синтаксисом метода, который будет использоваться в моем протоколе?

@протокол SongChooserDelegate Сонгчусерделегата

-(недействительный) didTap:(NSData *) данные; <———— Я предполагаю, что здесь

@end

Если это не сработает — что будет?

Спасибо, любая помощь была бы с благодарностью принята …. это мой последний шаг в создании моего приложения для моей выпускной диссертации, которая должна быть сдана в пятницу!!!!! eeeek.

Ответ №1:

Мне потребовалось некоторое время, но я наконец понял это: если кому-нибудь нужны пояснения или весь код, дайте мне знать.

//UITableViewController.h

@протокол SongChooserDelegate Сонгчусерделегата

-(недействительный) didTap:(NSURL *)songUrl;

@end

//UITableView.m

  • (недействительно)viewDidLoad { [self.player prepareToPlay];

    // Указать на каталог документов NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@»Documents»]; NSError *error = nil; NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:ошибка пути:amp;error]; if (array == nil) { // Обработать ошибку } self.songs = array;

    [super viewDidLoad];

}

  • (недействительно)TableView: (UITableView *)TableView выбрал значение indexPath: (NSIndexPath *)indexPath {

    UIAlertView * показывает выбор; NSString * сообщение; message = [[Выделение NSString] initWithFormat:@»% @», [индексация объекта songs:indexPath.row]]; showSelection = [[Выделение UIAlertView] initWithTitle:@»Выбранная дорожка» сообщение: делегирование сообщения: nil cancelButtonTitle:@»OK» Другие названия кнопок: nil]; [showSelection показать]; [showSelection release]; [выпуск сообщения];

    NSString *applicationDocumentsDirectory = [NSSEARCHPATH fordirectoriesindomains(NSDocumentDirectory, NSUserDomainMask, ДА) lastObject]; NSString *Путь к файлу = [Строка applicationDocumentsDirectory, добавляющая компонент пути: [песни objectAtIndex:indexPath.row]]; NSURL *url = [NSURL fileURLWithPath:путь к файлу];

    [self.delegate didTap:url];

    }

//ViewController.h

@interface ViewController: UIViewController < SongChooserDelegate, AVAudioPlayerDelegate > UIViewController <Настройка SongChooserDelegate, настройка AVAudioPlayerDelegate >

//ViewController.m

-(недействительный) didTap:(NSURL *)songUrl{

  player = [[AVAudioPlayer alloc]initWithContentsOfURL:songUrl error:nil];
  

[подготовка проигрывателя к воспроизведению];

}