2011-01-07 7 views
4

우리는 UISplitViewController 응용 프로그램에서 특정 동작을 필요로합니다. TableViewController가 MasterView 마스터 UINavigationController 및 세부 정보가 포함 된 UISplitViewcontroller UINavigationController

  • FormTwoViewcontroller에 intialised - - 우리는 3 뷰

    • FormOneViewController 다음과 같은 계층 구조를 가지고 TableViewCotnroller는
    • FormThreeViewcontroller detailView에 initalised - 아직 표시되지 않습니다.

    사용자가 FormTwoViewController에서 항목을 선택하면 FormThreeViewCOntroller가 detailView에 나타나고 FormTwoViewController (현재 세부 정보보기)가 masterView가됩니다.

    뷰 컨트롤러에 스택을 반환하려면 상세보기에서 뒤로 단추가 있어야합니다. 다시를 누르면 FormTwoViewController가 detailView가되고 FormOneViewController가 다시 마스터 뷰가됩니다.

    우리는 UISPlitViewcontroller와 masterNavigationController 및 detailNavigationController를 사용하여이 기능을 구현하려고했습니다. 우리는 응용 프로그램이 시작될 때 뷰가 올바르게 표시되는 초기 단계에서 FormTwoViewController Item을 선택하고 FormThreeViewController를 detailNavigationController에 푸시하고 FormTwoViewController를 masterNavigationController 스택에 푸시합니다. BACK 버튼이는 아무것도하지 않는다 상세 뷰 컨트롤러에 눌렀을 때 우리가 지금 가지고있는

    문제는

    1. 두 가지이다. 핸들러가 연결이 끊어진 것처럼 보입니다.
    2. popover에 masterview를 표시하기 위해 세로 모드에서 단추를 얻지는 않습니다.

    아무에게도이 작업을 수행하는 방법이나 도움을 얻은 사례가 있습니까?

  • +0

    몇 가지 코드를 보여 주면 도움이 될 것입니다. "그것은 FormNavigationController에 FormThreeViewController를 푸시하고 FormTwoViewController는 masterNavigationController 스택에 푸시됩니다." 정확히 어떻게하는지 알고있는 것이 중요합니다. popover 버튼에 관해서는, 분할 뷰 컨트롤러의 델리게이트를 구현하는 것은 당신에게 달려 있습니다. 너니? – matt

    답변

    10

    네, 그렇게 할 수는 있습니다 만, 마스터와 디테일을위한 별도의 뷰 컨트롤러를 생성해야합니다. 새 프로젝트를 분할 뷰 컨트롤러로 만들고 xib에서 분할 뷰를 제거하여 코드에서 분할 뷰를 생성합니다.

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    
        // Override point for customization after app launch. 
        self.splitViewController =[[UISplitViewController alloc]init]; 
        self.rootViewController=[[RootViewController alloc]init]; 
        self.detailViewController=[[DetailViewController alloc]init]; 
    
        UINavigationController *rootNav=[[UINavigationController alloc]initWithRootViewController:rootViewController]; 
        UINavigationController *detailNav=[[UINavigationController alloc]initWithRootViewController:detailViewController]; 
    
        // Add the split view controller's view to the window and display. 
        self.splitViewController.viewControllers=[NSArray arrayWithObjects:rootNav,detailNav,nil]; 
        self.splitViewController.delegate=detailViewController; 
        [self.window addSubview:self.splitViewController.view]; 
        [self.window makeKeyAndVisible]; 
    
        return YES; 
    } 
    

    여기서 rootviewcontroller는 ur form이고 detail view controller는 ur form 2입니다.

    자세히보기 컨트롤러 ie 두 개의 클래스 생성 클래스 변수 SplitViewAppDelegate * appDelegate; // id 위젯 위임 변수 변수를 설정하고 합성합니다.

    UR 형태 두

    - (void)viewDidLoad { 
    self.appDelegate = (SplitViewAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    } 
    

    에서 다음

    및 UR 형태 세

    - (IBAction)pushViewController:(id)sender{ 
        NSLog(@"%@",self.appDelegate.splitViewController.viewControllers); 
        RootLevel1 *rootLevel1 =[[RootLevel1 alloc]init];//create form 1 root vc and assign form 1 vc 
        DetailLevel1 <UISplitViewControllerDelegate>*detailLevel1=[[DetailLevel1 alloc]init]; 
    
        UIBarButtonItem *backButton = [[UIBarButtonItem alloc] 
                initWithTitle: @"Home" 
                style:UIBarButtonItemStylePlain 
                target:self 
                action:@selector(home)]; 
        rootLevel1.navigationItem.leftBarButtonItem=backButton; 
        [self.appDelegate.splitViewController viewWillDisappear:YES]; 
        [[self.appDelegate.splitViewController.viewControllers objectAtIndex:0] pushViewController:rootLevel1 animated:YES]; 
        [[self.appDelegate.splitViewController.viewControllers objectAtIndex:1] pushViewController:detailLevel1 animated:YES]; 
        self.appDelegate.splitViewController.delegate = detailLevel1; 
        [self.appDelegate.splitViewController viewWillAppear:YES]; 
    
    } 
    

    추진 최종적하면서 뷰 컨트롤러

    -(void)home { 
        [self.splitViewController viewWillDisappear:YES]; 
        [[self.appDelegate.splitViewController.viewControllers objectAtIndex:0]popViewControllerAnimated:YES]; 
        [[self.appDelegate.splitViewController.viewControllers objectAtIndex:1]popViewControllerAnimated:YES]; 
        UIViewController <UISplitViewControllerDelegate>*viewController=[[self.appDelegate.splitViewController.viewControllers objectAtIndex:1] visibleViewController]; 
        self.splitViewController.delegate=viewController; 
        [self.splitViewController viewWillAppear:YES]; 
    
    } 
    

    을 저런 애 대해 적절히 UR splitview의 delgeate 세트.

    +0

    에서 코드를 다운로드 할 수 있습니다. http://kshitizghimire.com.np/uisplitviewcontroller-multipledetailviews-with-navigation-controller/ –

    관련 문제