2011-03-15 4 views
7

보기를로드하는보기가있어서보기를 기본 탐색 컨트롤러로 밀어 넣어야합니다.더 좋은 방법이 있습니까? 위임 -> 위임 -> 위임

각보기에 대한 대리인을 설정했으며 기본적으로 내 호출을 기본 탐색 컨트롤러에 '체인'으로 백업합니다.

효과가 있지만 더 좋은 (쉬운?) 방법이 있다면 궁금합니다.

답변

-1

당신이 당신의 프로그램을 설정 한 방법에 따라 앱 위임에 포함 된 경우 UINavigationController 당신은 어디에서 탐색 컨트롤러에 액세스 할 수 있습니다 다시

[[[NSApp delegate] navigationController] pushViewController: myVC animated:YES]; 

하지만를 만 작동 앱 위임이 포함되어있는 경우 UINavigationController.

+0

UGH. 그래서 오타가 수정되었습니다. Mac OS와 iOS 프로그래밍 사이를 자주지나칩니다. –

7

NSNotificationCenter을 사용하여 NavigationController가 응답 할 것이라는 메시지를 보낼 수 있습니다. 있는 navigationController를 호출 할 필요가보기에

, 당신이 뭔가를 작성합니다 @"DoWork" 다른 객체가 응답되는 독특한 (대부분) 메시지의 이름입니다

[[NSNotificationCenter defaultCenter] postNotificationName:@"DoWork" object:nil]; 

.

그리고 당신의있는 navigationController에 당신과 같이, 그 통지를 잡을 수 있도록 관찰자를 추가해야합니다 :

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doWork) name:@"DoWork" object:nil]; 

@selector(doWork) 당신이 통지가 게시 될 때 수행 할 선택하고, @"DoWork" 응답 할 알림입니다.

+0

NavigationController가없는 경우에도 동일한 작업을 수행 할 수 있습니까? NotificiationnCenter를 첫 번째 VC에 추가하고 다른 VC에서 DoWork를 호출하려고 시도했지만 앱을 크래시합니다 (인식 할 수없는 선택기가 ...에게 전송). 그래서 당신이 여기서 설명하는 것은 NavigationController 사용에 달려 있다고 생각하십니까? –

+0

@ n.evermind : NSNotificationCenter는 네비게이션 컨트롤러를 사용하지 않습니다. 아마도 우리는 문제를 해결할 수 있도록 새로운 SO 문제를 만들어야합니다. – FreeAsInBeer

2

보기 A는보기 B를로드합니다. 나중에보기 B는보기 C를로드하고보기 컨트롤러를보기 B의 탐색 컨트롤러에 밀어 넣으려고합니까? A보기? 뷰 컨트롤러.

제공된보기 B에는 탐색 스택의 일부인보기 컨트롤러가 있습니다. 그러면보기 컨트롤러는 [self navigationController]을 통해 스택이 얼마나 멀리 떨어져 있더라도 탐색 컨트롤러를 가져올 수 있습니다.

뷰에는 컨트롤러에 대한 포인터가 없지만 MVC를 완전히 중단하려는 경우 컨트롤러에 컨트롤러를 설정할 수 있습니다. 더 나은 방법은 컨트롤러가 탭 동작 (또는보기 C를로드하고 푸시하라는 메시지가 무엇이든지)을받은 다음보기 컨트롤러가 스와핑을 처리하도록하는 것입니다. 예를 들어보기 B가 표보기 인 경우 새보기 제어기를 눌러 행 선택을 처리 할 수 ​​있도록 해당보기 제어기를 UITableViewDelegate으로 설정합니다.

귀하의 질문은보기,보기 컨트롤러, 탐색 컨트롤러 및 탐색 컨트롤러의 컨텐트 영역에 표시되는보기를 구별하지 못하는 것 같습니다. 이러한 모든 객체는 서로 다른 역할을하므로 응용 프로그램 개발을 계속하기 전에 해당 객체와 객체 간의 상호 관계를보다 자세히 관찰해야합니다.