2013-08-20 6 views
1

나는 간단한 것을 생각해 내려고 노력하고 있습니다. 그러나 나는 그것을 이해할 수 없습니다.iOS : 탭에서 메서드 호출 viewController

나는 UITabBarController가 있으며 한 번에 다른 탭의 UIViewController를 표시하고 원래 UIViewController의 데이터를 사용하여 새 UIViewController에서 메서드를 호출해야합니다.

그래서 기본적으로 다른 UIViewController (아직 초기화되지 않았을 수도 있음)에 데이터를 전달하고 올바른 탭을 표시하려고합니다.

NSNotificationCenter을 사용하는 경우 탭의 UIViewController가 아직 초기화되지 않았는지 확실치 않으며 여기에서 위임을 사용하는 것이 조금 추합니다.

새 탭에서 데이터를 보내고 표시하는 명확한 방법은 무엇입니까?

답변

2

더 좋은 아이디어는 뷰 컨트롤러가 데이터를 전송 호출 할 수있는 탭보기 컨트롤러에서 구현하는 프로토콜을 가지고

+2

왜 투표가 실패했는지 모르겠다면 논리가 확실합니다. 원본 포스터가이 특정한 데이터 조각을 전달하기 위해 싱글 톤을 생성해야한다면 더 나은 해결책이 될 것입니다. – bennythemink

+1

예, 감사합니다! 프로토콜을 사용하면 뷰 컨트롤러가 논리적으로 분리된다는 점에 유의해야합니다. 가능하다면보기 컨트롤러는 자신의 작은 세계를 제외하고는 시스템 내 어디에서 일어날 필요가 있는지에 대한 지식이 없어야합니다. 대리자 (할당 된 경우)에게 무언가가 발생했음을 알리고 대리인이 해당 정보로 수행 할 작업을 결정할 수있게합니다. 다른 솔루션에서 제안 된 것처럼 글로벌 싱글 톤을 사 용할 필요가 없습니다. 분리 된 상태로 유지하면 테스트, 가독성이 향상되고 코드가 변경되기 쉽지 않습니다. – PixelCloudSt

1
int x = 1; //this is the view controller you want to go to. 
MySecondViewController *secondViewController = (MySecondViewController *)self.tabBarController.viewControllers[x]; 
[secondViewController setDataObject:dataObject]; 
[self.tabBarController setSelectedIndex:x]; 

그래서 무슨 일이 일어나고 있는지 당신이 전화하고 어떤 다른 뷰 컨트롤러를 설정하는 것입니다 컨트롤러를 tabBarController에서 가져 오면, 그렇지 않은 경우 시작됩니다. 그런 다음 컨트롤러에서 원하는 것을 설정할 수 있습니다. 그런 다음 선택한 탭으로 전환하면됩니다.

+0

이제는보기 컨트롤러가 탭 막대 컨트롤러에 연결됩니다. 프로토콜이 더 깨끗합니다. – Abizern

+1

저는 질문자의 즉각적인 질문에만 해결책을 제시했습니다. 저는 모델과 비즈니스 로직이 컨트롤러 스택과 분리되어 있다는 강한 믿음을 가지고 있습니다. –

1

두 컨트롤러에서 모두 액세스 할 수있는 일종의 (싱글 톤?) 데이터 모델이 있어야합니다. 두 번째 뷰 컨트롤러가 뷰를 표시하려고하면 표시 할 데이터를 결정하기 위해 데이터 모델을 참조해야합니다.

+1

내 솔루션이 작동하더라도 응용 프로그램에서 데이터를 처리하는 적절한 방법입니다. iOS는 MVC 패러다임과 싱글 톤/코어 데이터/등을 사용합니다. 모델은 컨트롤러 논리에서 데이터 논리를 분리합니다. 거의 항상 더 무거운 모델과 더 가벼운 컨트롤러를 갖는 것이 더 좋습니다. –