1

어느 쪽에서도 테이블보기가 있고 어느 쪽에서도 상호 작용이 발생할 때마다 테이블을 다시로드해야하는 분할보기 컨트롤러가 있습니다. 분할 뷰 컨트롤러의 왼쪽 (마스터)에서 셀을 선택할 때마다 델리게이트를 구현하여 세부 뷰 컨트롤러를 업데이트했습니다.UISplitViewController의 세부보기 및 마스터보기 컨트롤러간에보기를 새로 고치는 방법은 무엇입니까?

1. 알고 싶습니다. 대리인을 다시 구현하여 (즉, 마스터보기를 업데이트 할 때) 또는 일반적인 접근 방식이 필요합니다.

2. 이미 두 클래스 모두에 대한 코드를 작성 했으므로 왼쪽에서 셀을 선택하면 위임 메소드를 통해 뷰를 새로 고치거나 새로 고치기 만하면 바로 업데이트됩니다. 그러나 viewWillAppear/viewDidAppear/viewWillDisapper와 같은 메소드는 업데이트됩니다. ..etc는 호출되지 않습니다. 이제 왼쪽 셀 선택에서 트리거 된 delegateMethod에서 viewWillAppear 메서드를 수동으로 호출하고 있습니다. 클래스 메서드가 auto라고 불리는 기술이 있습니까? 또는 splitViewController를 사용하는 가장 좋은 방법을 가리킬 수 있습니까?

답변

1

아마도 테이블을 다시로드하려면 reload... UITableView 메서드 중 하나를 사용해야합니다. reloadData 메서드는 전체 테이블을 다시로드합니다. 어떤 행이 변경되었는지 알면 다른 방법 중 하나를 사용하는 것이 좋습니다. 변경 사항이 행 번호에도있는 경우 적절한 애니메이션을 얻으려면 insert... 또는 delete... 메소드 중 하나를 사용해야합니다. 자세한 내용은 UITableView documentation을 참조하십시오.

첫 번째 질문은 디테일 뷰 컨트롤러가 마스터를 대리인으로 가질 것으로 기대합니다. 그러나 마스터는 어느 디테일 뷰 컨트롤러가 오른쪽에 있는지 간단히 알 수 있습니다. 결국, 그는 그것을 시작했습니다.

2

먼저 코드에서 viewWillAppear 등을 호출하는 것이 좋지 않을 수 있습니다. 이러한 동작은 앞으로 변경 될 수 있기 때문입니다. (예 : 초기 iOS 버전에서 viewDidLoad가 여러 번 호출되는 경우 인스턴스 당 한 번 호출 됨). 코드를 별도의 메소드로 옮길 수 있습니다.

둘째, NSNotification을 변경 사항을 전달하는 방법으로 볼 수 있습니다. 쉽고 위임 포인터를 보관할 필요가 없습니다. 항목을 탭하면 세부 측에서

[[NSNotificationCenter defaultCenter] addObserver:self 
    selector:@selector(updateFromDetail:) name:DETAIL_UPDATED object:nil]; 

... 

-(void)updateFromDetail:(NSNotification *)no 
{ 
    NSDictionary *nd = [no userInfo]; // get relevant information 

    // take action.... 
} 

: 같은 마스터 컨트롤러 뭔가 다음

#define MASTER_UPDATED @"MasterUpdated" 
#define DETAIL_UPDATED @"DetailUpdated" 

과 :

예를 들어, 당신은 아이 뷰 컨트롤러 .H에 추가 할 수 있습니다 다음과 같은 메시지를 보냅니다.

NSDictionary *userInfo = @{@"somekey":@"somevalue", @"anotherkey":@"anothervalue"}; 

[[NSNotificationCenter defaultCenter] postNotificationName:DETAIL_UPDATED 
    object:self userInfo:userInfo]; 
+0

예, 대리인을 벗어난 알림을 사용합니다. – djay

0

안녕하세요 @Divjyot 지금 비슷한 시나리오에서 작업하고 있지만 셀을 클릭하면 다른 viewcontrolelr로 변경됩니다. 셀을 클릭하면이 작업이 수행됩니다. masterViewController (PrimaryViewCOntroller)의 모든 viewcontroller와 함께 생성 및 배열을 수행하고 델리게이트를 사용하여 셀 선택에서 detailViewController에 전달했습니다. 따라서 primaryViewControllr의 셀을 클릭하면 secondaryViewCOntroller가 새로운 ViewController로 업데이트됩니다. 만약 당신이 더 많은 정보를 abt 아래에 어떻게이 의견을 구현하는

+1

알았어! 대리인을 사용하여 master에서 updateUI로 세부 정보를 전달합니다. 역방향 역할에 대한 알림 실제로 마스터와 디테일을 동시에 새로 고쳐야했습니다. 통찰력에 감사드립니다! – djay