2012-12-04 3 views
0

안녕하세요 저는 인터넷 검색을 해왔고 답변을 찾을 수 없으며이를 수행 할 수있는 다른 방법이있을 수 있습니다. 그래서 커뮤니티에 추가 할 것입니다.테이블 뷰의 여러 대리자

UIViewController에서 tableview가 있습니다. UIViewController는 테이블 뷰에 대한 데이터 소스 및 위임자입니다. 그런 다음 주 UIViewController에서 스크롤하는 데 반응하는 두 번째 컨트롤러가 있습니다. 이상적으로 scrollviewDidBeginScrolling이 두 컨트롤러에서 모두 실행될 수 있도록 두 번째 컨트롤러를 위임자로 지정하는 것이 좋습니다. 컨트롤러 2를 위임자로 설정하고 tableview 참조를 전달하기 때문에 구현하기가 쉽기 때문에이 작업을 수행하려고합니다. 그러면 모든 어려운 작업을 수행하게됩니다.

기본적으로 tableView.delegate에 대리자 배열을 전달할 수 있습니까? 여러 컨트롤러 나 뷰가 scrollViewDidBeginScrolling과 같은 이벤트에 반응해야하는 상황을 볼 수 있습니다. 내가 tableviews 새로 고침 당겨 핸들보다 컨트롤러를 사용하고

-(void)scrollViewDidBeginScrolling:(UIScrollView *)scrollView{ 
    [anotherViewController scrollviewDidScroll:scrollview]; 
    [otherView scrollViewDidScroll:scrollview]; 
} 

같은 물건을 할 필요없이 비슷한 작업을 수행 할 수있는 방법이와 나는 같은 몇 줄의 가능한 한 쉽게 구현을 만들고 싶어/메서드를 가능한 한 tableview 컨트롤러에.

답변

2

필요한 것을 얻을 수 있지만 대리인을 연결해야합니다. 테이블보기에는 하나의 대리자 만 있지만, 사용자는 자신 만의 사용자 지정 대리자 메서드를 테이블 뷰의 대리자 인 뷰 컨트롤러에 정의하고 다른 뷰 컨트롤러를 자체 대리자로 설정할 수 있습니다. 또 다른 무차별 방식은 알림을 보내고보기 컨트롤러가 알림에 등록되도록하는 것입니다.

1

UIViewController1 위임 메서드에서 UIViewController2 대리자 메서드에 동일한 호출을 보냅니다. E.I : 아래의 코멘트

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [delegate2 tableView:tableView didSelectRowAtIndexPath:indexPath]; 
    // etc... 

편집. 당신은 하위 클래스 UITableView 및 여러 대리자 속성 또는 대리자 속성의 배열을 제공 할 수 있습니다.

+0

예 사용자가 ViewController2를 작동 시키려면이 메소드를 추가하지 않아도됩니다. 개발자는 모든 필수 메서드가 있는지, 기존 메서드와 충돌하는지 확인해야하기 때문에 사용자 지정 클래스의 다중 메서드 구현에 대한 열렬한 팬이 아닙니다. 이 답변은 내가 원하는 방식으로 작동하지 않을 것입니다. –

+0

@AlexReynolds 수정 된 답변보기 –

관련 문제