2010-08-23 4 views
1

나는 사용자 정의 UITableViewCell을 사용하여 만든 많은 음악 플레이어로 채워진 UITableView를 가지고있다. (여기에 링크 된 스크린 샷에서 볼 수 있듯이 : screenshot).사용자 지정 UITableViewCell의 두 인스턴스간에 메시지를 어떻게 보냅니 까?

코드화 된 방식의 문제점은 각 셀이 완전히 독립적이므로 하나의 tableviewcell이 다른 셀에 오디오 재생이 있는지 확인하는 방법이 없다는 것입니다. 즉, 앱을 실행하면 동시에 두 개 이상의 오디오 파일을 재생할 수 있습니다.

궁극적으로 사용자가 재생 버튼을 눌렀을 때 다른 셀이 오디오를 재생하는지 확인하기 위해 체크인하기 전에 어떻게해야합니까? 자체 오디오 파일 재생?

내 프로젝트를 게시 하시겠습니까?

감사합니다.

답변

3

처음에는 셀 재생 자체가 오디오 재생을 담당해야한다고 생각하지 않습니다. 그들은 오디오를 재생할 다른 객체 (UITableView를 담당하는 컨트롤러와 같은)를 말하게해야합니다. 그 컨트롤러는 분명히 다른 것을 연주하기 전에 이미 연주하고 있던 것을 멈추게 할 것입니다.

일반적으로 많은 논리를 '보기'에 넣는 것은 좋지 않습니다.

+0

답변을 게시했지만 전 imaginaryBoy에 동의합니다. –

+1

나는 이것을 반향시킬 수있다. 보기에 논 로직을 두지 마십시오. 컨트롤러에 의해 호출되는 서비스 클래스에서 이와 같은 기능을 캡슐화하십시오. 컨트롤러는 특정 뷰가 자신을 재생 중 또는 재생 중이 아님을 나타내도록 지시합니다. –

+0

두 가지 모두 솔루션에 감사드립니다. 저는 새로운 개발자이고 지금 당장 가장 큰 도전은 논리라고 생각합니다. 이렇게 생각하면 더 의미가 있습니다. –

1

아마도 알림 (NSNotification 및 NSNotificationCenter)을 사용하는 것이 가장 쉽습니다.

시작 및 중지에 공통적 인 알림 이름을 사용하십시오.

MusicPlayerWillPlay MusicPlayerWillStop

각 플레이어를 만들 때, 두 알림을 등록. 그런 다음 playerA를 재생하려고하면 MusicPlayerWillPlay 알림을 게시합니다. playerB, playerC 및 playerD는이 알림을받으며 재생중인 경우 중지됩니다.

한 가지주의 할 점은 각 플레이어가 다른 플레이어를 인식하지 못한다는 것입니다. 따라서 nil 객체로 등록해야합니다. 즉, playerA는 자신의 알림을 받게됩니다. 따라서 알림 메서드에서 다음과 같은 작업을 수행 할 수 있습니다.

 

{ 
    //... 
    if (sender == self) 
     return; 
    //... 
} 
 
관련 문제