2011-12-12 73 views
0

我的情況是我有一個包含UIButton的主視圖控制器(UIViewControllerPrimaryViewController.h .m)。按下後,將顯示第二個視圖控制器(UINavigationController),總體思路是按下「設置」按鈕並彈出導航視圖並允許用戶修改其設置。在當前視圖控制器內通過動作方法在視圖控制器之間切換

我已經能夠做到這一點,但我對我的方法並不完全有信心。在主視圖控制器內部,我添加了一個導航控制器並將其作爲主控制器內的插座鏈接。然後按下按鈕時,功能,showSettings叫做:

- (IBAction)showSettings { 
    [self presentModalViewController:navigationViewController animated:YES]; 
} 

類似地hideSettings被稱爲關閉。雖然這確實起作用,但我不確定我是否以最好或正確的方式完成了這項工作。我之前嘗試在MainWindow.xib中創建導航控制器並將其與App Delegate相關聯,但是我遇到了一個問題,我需要在PrimaryViewController.m實施文件中調用/顯示此控制器,並且無法解決如何執行此操作(即如何在App Delegate類之外執行[super addSubview:];)。

我可以使用我現在擁有的,但想知道替代方法來做到這一點,主要是因爲我不滿意Modal View控制器的過渡動畫,而寧願使用翻轉動畫。

在此先感謝!

+0

對,而不是使用'presentModalViewController'我簡單地使用'addSubview:navigationViewController.view'。這是有效的,但奇怪的是,視圖放置在主窗口下方約20個像素處,並且我可以看到它下面的視圖。 – sooper

+0

必須在界面生成器中調整框架並將佈局設置爲「想要全屏」。 – sooper

回答

0

這裏是我會做什麼: 1.創建一個導航控制器單獨的類文件。說它稱爲MyNavigateController。您可以將其添加到YourAppAppDelegate。 MyNavigateController.h看起來是這樣的:

@interface MyNavigateController : UIViewController 
{ 
    UINavigationController *navController; 
} 
@property (nonatomic, retain) IBOutlet UINavigationController *navController; 
@end 

MyNavigateController.m看起來像這樣的viewDidLoad方法:

- (void)viewDidLoad 
{ 
[self.view addSubview:self.navController.view]; 
} 

對於MyNavigateController.xib,使用拖放導航控制器對象,並將其分配給您的PrimaryViewController類。

在你PrimaryViewController類

- (IBAction)showSettings { 
    ChildViewController *childViewController = [ChildViewController alloc]initWithNibName:@"ChildViewController" bundle:nil]; 
//childViewController.ivarsifany = .... //optionaly assign values to ivars etc. 
    [self.navigationController pushViewController:childViewController 
             animated:YES]; 
} 
+0

你的意思是'MyNavigateController * childViewController = [MyNavigateController alloc] initWithNibName:@「ChildViewController」bundle:nil];'?你在哪裏聲明'navigationController'爲'self.navigationController'? – sooper

+0

否... ChildViewController是您想要從PrimaryViewController呈現的任何子視圖控制器類。它可以是另一個UIViewController等。 self.navigationController是由我上面提到的步驟產生的:「對於MyNavigateController.xib,請使用拖動導航控制器對象並將其分配給您的PrimaryViewController類。 – user523234

0

如果你的唯一的問題是presentModalViewController:具體的過渡動畫,那麼你可以改變的過渡類型。有幾個不同的給定的過渡動畫,就像這樣:

- (IBAction)showSettings { 
    [navigationViewController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal]; 
    [self presentModalViewController:navigationViewController animated:YES]; 
} 

有多種過渡的風格,如UIModalTransitionStyleCoverVerticalUIModalTransitionStyleCrossDissolveUIModalTransitionStylePartialCurl

相關問題