IOS вызывает метод из другого класса - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть приложение панели вкладок с 3-мя контроллерами представления, у FirstViewController есть аудиоплеер со списком песен и кнопка воспроизведения / паузы.Теперь я хочу, чтобы SecondviewController и ThirdViewController добавили кнопку, которая будет вызывать метод - (void) playpause класса FirstViewController.

Выглядит просто, но я не нашел способа заставить его работать, я попробовал это:

  - (IBAction) playpause1
 {
PlayerAppDelegate *appDelegate = (PlayerAppDelegate*)[[UIApplication sharedApplication] delegate];
[appDelegate performSelector:@selector(playpause)];
NSLog(@"playpause test");   

}

Но этот код управляет только методом в делегате приложения, а не напрямую в классе FirstViewController, как мне нужно.

Есть советы?

Ответы [ 2 ]

1 голос
/ 14 сентября 2011

Существует несколько возможностей:

  • Переместить возможность воспроизведения звука на отдельный объект, поскольку это задача, отличная от того, что обычно делает контроллер представления.Затем дайте всем трем контроллерам представления ссылку на этот аудиоплеер и позвольте им использовать его по мере необходимости.

  • Пусть объект, который создает контроллеры представления (обычно делегат приложения), дает второйкаждый третий контроллер вида ссылается на первый контроллер вида и позволяет им отправлять сообщение -playpause.

  • Использовать уведомления.Контроллеры второго и третьего представления могут просто опубликовать уведомление, которое будет прослушивать первый контроллер.Это исключает необходимость знать три контроллера представления друг о друге.

0 голосов
/ 15 сентября 2011

Если я правильно понял ваш вопрос ... Вы можете использовать дополнительный протокол и делегировать для достижения этой цели. Например, в файле .h вашего SecondViewController:

@ протокол SecondViewControllerDelegate - (недействительными) playpause1; @ Конец

@ свойство (назначить) идентификатор делегата;

В файле .h вашего FirstViewController включите следующую строку интерфейса:

FirstViewController должен реализовывать - (недействительными) playpause1 { NSLog (@ "playpause test"); }

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