2014-01-29 139 views
0

這是我在Stackoverflow上的第一篇文章。我是iOS開發新手,我搜索並嘗試了很多(超過兩天),但我真的堅持一些應該很簡單的事情。在導航控制器中嵌入子視圖

我有一個主視圖(全尺寸的iPhone視圖)。在該視圖內,我想要一個較小尺寸的子視圖(例如290 x 400)。該子視圖必須嵌入導航控制器中。換句話說:我想要一個工作導航欄在這個子視圖的頂部。

我已經使用容器視圖在故事板中構建了這個。那裏沒問題。但是,我只想在代碼中執行此操作。我成功地在代碼中製作了基於導航控制器的應用。我還成功地編寫了一個應用程序與兒童視圖控制器。問題似乎是結合這些問題。

當我嘗試在其中一個子視圖控制器中加載navigationcontroller時,應用程序崩潰並且說SubView視圖控制器必須具有Container視圖控制器作爲父級,但它現在具有UINavigationcontroller作爲父級。

之後,我試圖直接加載navigationcontroller在子視圖,就像這樣:

SubViewVC *subviewcontroller = [[SubVC alloc] initWithNibName:@"SubVC" bundle:nil]; 

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:subviewcontroller]; 

[navController setView:subviewcontroller.view]; 

[self.view addSubview:subviewcontroller.view]; 

不過,現在我得到一個崩潰,指出一個觀點只能一次一個控制器關聯。子視圖與SubViewVC相關聯。在將其與UINavigationcontroller關聯之前,必須將其清除。

我明白這個問題,但不知道如何解決它。任何幫助深表感謝。

回答

6

你錯誤地做了幾件事。首先,您不需要通過使用根視圖控制器對其進行實例化來設置導航控制器的視圖。其次,你應該添加navController的視圖到你的視圖,而不是subviewcontroller的視圖。你也應該添加navController作爲一個孩子,並設置其視圖的框架。類似這樣的:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    SubViewVC *subviewcontroller = [[SubViewVC alloc] initWithNibName:@"SubViewVC" bundle:nil]; 
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:subviewcontroller]; 
    [self addChildViewController:nav]; 
    [nav didMoveToParentViewController:self]; 
    nav.view.frame = CGRectMake(15, 20, 290, 400); 
    [self.view addSubview:nav.view]; 
} 
+0

rdelmar,你是今天的英雄。非常感謝你。像魅力一樣工作。 – Tuslareb

相關問題