2012-06-18 36 views
1

的差異,代碼如下:什麼是我創建了一個名爲「YLJTestViewController」由Interface Builder的ViewController pushViewController和addSubview

-(IBAction)DoneButtonPressed:(id)sender 
{ 
    YLJTestViewController *testViewController = [[YLJTestViewController alloc]initWithNibName:@"YLJTestViewController" bundle:nil]; 
    [self.navigationController pushViewController:testViewController animated:YES]; 
    //[self.view addSubview:testViewController.view]; 
} 

但是當我使用[self.view addSubview:textViewController.view];墜毀,但使用[self.navigationController pushViewController:testViewController animated:YES];它工作得很好,所以什麼?區別我認爲他們是相同的......

回答

1

由於sptrakesh國this Apple Support forum thread

addSubview是較低列弗el功能,您可以使用此功能將其他 視圖添加到您的父/主視圖。 pushViewController用您與新視圖控制器相關聯的視圖替換當前主窗口中的當前主視圖的 視圖控制器。當您想要 在當前的 視圖之上以模態方式顯示視圖(阻止先前視圖)時,使用presentModalViewController。如果您使用全屏模式視圖控制器,則之間的pushViewController和 之間的UI行爲方面沒有太多差別。當您使用pushViewController時,您可以「彈出」到 已推送的視圖控制器陣列中的任何視圖控制器,這與嵌套的模態視圖不太容易。

+0

如果您從其他來源複製語言,則必須正確引用它們。我在這裏做過,但請在將來做這件事,否則這將被認爲是抄襲。 –

2

-addSubview:是UIView的一種方法。它將視圖插入到另一個視圖中。就像在頁面上添加按鈕一樣。

-pushViewController:是UINavigationController的一種方法。它將視圖控制器推入導航堆棧。就像從表格視圖滑動到細節視圖一樣。

總之,-addSubview:組成一個視圖。 -pushViewController:是視圖之間的轉換。

3

pushViewController就像是在一疊紙上添加一張紙,而addSubView就像是將一張紙粘在另一張紙上。

先前的視圖與推送的視圖控制器的新視圖之間沒有明確的關係(就像紙張仍然在堆棧中分開)。雖然父視圖會對其子視圖(如膠水)保持強有力的參考。

0

在你的情況下,問題不在於使用addSubview:pushViewController:animated:,而只是使用addSubview:時的錯字。

[self.view addSubview:textViewController.view]; // misspelled 

應爲(以s x替換)

[self.view addSubview:testViewController.view]; // correct 

至於addSubview:pushViewController:animated:之間的差別,其他人已經取得了很好的答案。基本上,當你替換你的entires屏幕的內容時,你應該使用pushViewController:animated:;當你將非全屏UI元素添加到現有的視圖時,你應該使用addSubview:

當我們在談論UIViewController的觀點時,pushViewController:animated:應該是您的首選方法。

0

我最近碰到類似的問題addSubviewpushViewController。這裏的每個人都發表了很好的評論,但我會添加一件東西:

通常addSubview本身並不使用。您通常使用它與presentModalViewController,或在控制器遏制情況下,addChildViewController

因此,在總結:

  1. 如果您正在使用導航控制器,請使用P ushViewController/popViewController通過您的應用程序導航。
  2. 如果您手動切換視圖,請使用presentModalViewController
  3. 如果您正在執行控制器遏制,請使用addChildViewController
  4. 如果您正在使用故事板,請使用Segues。
相關問題