2013-04-10 131 views
0

我正在開發包含最新SDK的iOS 5.0+應用程序。將控制器添加爲從子視圖打開的子控制器

我有一個視圖控制器的視圖(VC1)。在這個視圖裏面我有一個自定義的孩子UIViewview2)。

從這個子視圖我要打開另一個視圖控制器(VC2),我想這樣做增加VC2小時候控制器VC1,但我不知道該怎麼做。

現在,視圖2我有這樣的方法:

- (void) handleLongClick:(UILongPressGestureRecognizer *)gestureRecognizer 
{ 
    SettingsDialogViewController* dialog = [[SettingsDialogViewController alloc] initWithNibName:@"GaugeSettingsDialogViewController" bundle:nil]; 

    dialog.view.frame = self.superview.superview.bounds; 
    [self.superview.superview addSubview:dialog.view]; 
} 

但如果我這樣做,dialog將被釋放,我不想添加一個實例變量,因爲它會在內存中的所有時間。

如何添加VC2作爲VC1的子控制器?

+0

我不明白你爲什麼不想創建父'UIViewController的實例變量/屬性你能澄清一下嗎? UIPopoverController做類似的事情,將子視圖控制器存儲在一個保留的屬性中。 – 2013-04-10 07:01:20

+0

因爲它會一直在內存中,浪費內存。 – VansFannel 2013-04-10 07:36:25

回答

0

但如果我這樣做,對話框將被釋放,我不想添加一個實例變量,因爲它每次都將在內存中。

即使您不這樣做,它也會在內存中的保留數少一個。但是你不需要把它作爲一個成員變量來顯示。

從視圖切換到另一視圖有很多方法。我看到你有兩個視圖控制器。所以我會告訴你最簡單(常見)的方法。

  • 推到navigationstack

如果您認爲有一個導航控制器,你可以在第二控制器推送到導航堆棧。雖然顯示VC1

UINavigationController *navigationller = [[UINavigationController alloc] initWithRootViewController:VC1]; 
// show VC1 

然後顯示VC2這樣

- (void) handleLongClick:(UILongPressGestureRecognizer *)gestureRecognizer 
{ 
SettingsDialogViewController* dialog = [[SettingsDialogViewController alloc] initWithNibName:@"GaugeSettingsDialogViewController" bundle:nil]; 

[self.navigationController pushViewController:dialog animated:YES]; 
} 

您會自動獲取導航欄上的後退按鈕。

  • 顯示爲模態

對於你不需要有導航控制器。

- (void) handleLongClick:(UILongPressGestureRecognizer *)gestureRecognizer 
{ 
SettingsDialogViewController* dialog = [[SettingsDialogViewController alloc] initWithNibName:@"GaugeSettingsDialogViewController" bundle:nil]; 

[self presentViewController:dialog animated:YES completion:nil]; 
} 

當然,你需要添加一個動作再次關閉它,如果你想要的。在導航控制器上,您將自動獲得導航欄上的後退按鈕。請嘗試兩者並決定你需要什麼。

+0

感謝您的回答,但我不能'[self presentViewController:dialog animated:YES completion:nil];'因爲' - (void)handleLongClick:(UILongPressGestureRecognizer *)gestureRecognizer'在UIView上。 – VansFannel 2013-04-10 07:37:28

+1

然後你的觀點必須告訴他的視圖控制器他認識到了這個動作(例如使用委託)。視圖控制器應該負責改變視圖而不是視圖。一個觀點不應該那樣做,它是針對MVC模式的。 – Mert 2013-04-10 07:41:28

相關問題