2014-12-26 3 views
4

SWRevealViewController를 사용하여 내 응용 프로그램에서 슬라이드 메뉴 (왼쪽부터)를 구현하고 있습니다. 모든게 잘 작동하지만 지금은 약간의 문제에 직면하고 있습니다. 나는 "메인"뷰 컨트롤러 (볼 수있는 풀 뷰어와 "frontViewController"라고하지 않습니다.)에서 데이터를 전달하고자합니다. 앞면 하나). 슬라이드 메뉴 컨트롤러에 액세스하여 데이터를 전달할 수있는 모든 가능성을 시도했습니다. 여기에 내가 시도 것입니다 :iOS SWRevealViewController - 컨트롤러간에 데이터 전달

(MyControllerClass*)self.revealViewController.rearViewController 
(MyControllerClass*)self.revealViewController.frontViewController 

나는 또한 self.revealViewController.navigationController[0], self.revealViewController.navigationController[1]이, self.revealViewController.viewControllers[0], self.revealViewController.viewControllers[1] 같은 것들을 시도보다. 다음 단계는 prepareforsegue을 구현하고 하위 식별자 sw_frontsw_rear을 수신하는 것입니다. 그러나 이러한 경우가 아닌 경우 isKindOfClass[MyControllerclass class]을 확인하면 사실이됩니다. 나는 이것들이 모두 SWRevealViewController 타입이기 때문에 이것을 가정한다. 그리고 prepareForSegue는 전혀 호출되지 않지만 모든 것이 올바르게 표시됩니다.

내게 가장 중요한 질문은 내 사이드 ​​메뉴와 내 "메인"(일명 전면) 컨트롤러간에 데이터를 전달할 수있는 방법입니다 (다른 방법 괜찮을까요?)

감사

답변

5

:로

AppDelegate *appDel = (AppDelegate*) [UIApplication sharedApplication].delegate; 
    appDel.sharedItem = firstControllerObj; 

그리고 목적지 VC의 개체에 액세스 : AppDelegate에의 속성 만들기와 같은 firstViewContoller에

@property (nonatomic, strong) NSArray *sharedItem; 

이제 설정이 객체 말 대답. SWRevealViewController를 통해 자신의 컨트롤러에 직접 액세스 할 수 없습니다 (NavigationController에 연결되어 있으므로). 먼저 원하는 navigationController를 얻고 컨트롤러를 통해 데이터를 전달합니다. 이론에 대한 코드는 다음과 같습니다.

그리고 thats it. 지금 당신은 당신의 사용자 정의 컨트롤러

+0

안녕하세요, 내 메뉴에 대한보기 컨트롤러를 식별하는 것과 동일한 문제가 있습니다. 신속하게 처리하는 방법을 알고 계십니까? 당신은 또한 전체 segue에 대한 코드를 게시 할 수 있습니까? 또한 어떤 segue 식별자를 사용 했습니까? 감사합니다 –

+0

안녕 알리, 당신의 문제를 해결 했습니까? 나는 SWIFT를 사용하지 않고 있지만, 도움이된다면 Objective C 코드를 게시 할 수 있습니까? – user3466562

+0

코드를 시도하고 있지만 if ([rearNavigationController.topViewController isKindOfClass [MyCustomViewController]]) –

0

그런 다음 viewContollers를 통해 액세스 할 수 있습니다, AppDelegate에있는 공유 객체를 생성합니다. 내가있어

AppDelegate *appDel = (AppDelegate*) [UIApplication sharedApplication].delegate; 
    NSArray *receivingObj = appDel.sharedItem; 
+0

이것이 유일한 방법입니다. 나는 최선의 방법이 글로벌 변수를 만드는 것이라고 생각하지 않는다. 어떻게 든 컨트롤러에 액세스 할 수 있어야합니다. 그렇지 않으면 SWRevealViewController가 쓸모 없게됩니다. – user3466562

0

LoginViewController -> SWRevealViewController -> NavigationController -> HomeViewController (HomeViewController 년대 frontViewController) 그건 내가 SEGUE를 사용 SWRevealViewController에 LoginViewController에서 SWRevealViewController

통과 ViewControllers의 순서이다에있는 모든 속성에 액세스 (및 설정) 할 수 있습니다. 데이터를 전달하기 위해 나는 이것을 prepareForSegue에 사용합니다.

if ([[segue identifier] isEqualToString:@"homeVC"]) { 

    SWRevealViewController *destination = [segue destinationViewController]; 
    [destination loadView]; 
    UINavigationController *navViewController = (UINavigationController *) [destination frontViewController]; 

    if ([navViewController.topViewController isKindOfClass:[HomeViewController class]]) { 

     HomeViewController* homeVC = (HomeViewController*)navViewController.topViewController; 
     homeVC.title = @"Test1"; 
    } 
} 
관련 문제