2009-07-14 54 views
1

我是iPhone新手,我真的把這個給了我。我喜歡它,但是有一件事情會讓我感到厭煩。我如何保持切換視圖?我知道如何來自我創建新項目時給予我的第一視圖,以及我製作的視圖,但我如何才能通過這兩個窗口?我如何獲得我創建的視圖?在3個或更多視圖之間切換

我有這個應用程序,它有一個與UITableViewController飼料的NavigationController主窗口。這是我的主菜單。我在右上角有一個「+」 - 按鈕,它給了我一個新的視圖,但是如何從這裏獲得新的視圖?當用戶選擇要添加的內容時,如何推送新視圖?

希望有人能夠理解我的問題。一些文檔的鏈接將會很好。我到處尋找。

回答

1

對於這種特殊情況,人們通常使用presentModalViewController:animated:方法UIViewControllerUINavigationControllerUIViewController子類,所以您的代碼會是這個樣子:

UIViewController *addingViewController = [[UIViewController alloc] initWithNibName:@"AddingView" bundle:nil]; 
[[self navigationController] presentModalViewController:addingViewController animated:YES]; 
[addingViewController release]; 
+0

啊這是我如何做到這一點。我有Xcode的一些問題,所以我現在已經解決了。我可以超越Starrt視圖和我自己創建的視圖。我以某種神祕的方式想到,我必須創建一個xib,然後傳遞它(以這種方式,我不能像以前那樣創建一個表)。但你讓我走上了賽場。 – mslot 2009-07-14 21:37:19

3

你可以做這麼多不同勢的方式,你可以做什麼的塞巴斯蒂安說,你也可以有一個管理的其他共同RootViewController的視圖控制器視圖。這是我喜歡做的,我實際上在RootViewController上定義了一個類似於ToggleView的協議:UIViewController newController UIViewController:oldController。我使任何UIViewController,我想能夠從該視圖切換到另一個實現此協議。這是因爲通常當你點擊一個按鈕時,你知道你想要下一個視圖。所以,當用戶點擊按鈕時,在擁有按鈕的UIViewController中,我創建了新的ViewController,並將其視圖推入屏幕,這很好,因爲它還允許我在視圖控制器中設置數據,而不必委派它到一些其他對象或使用單例來獲取新視圖中的數據,然後我調用我的toggleView方法和根視圖控制器進行切換。我覺得這個工作非常好,並且其中涉及任何代碼。如果我知道新的視圖總是會出自另一個特定的視圖(例如,一個觀看事件並創建這些事件的主頁),那麼我並不總是使用這種方法,在這種情況下,我將鬆散地將視圖控制器通過使用協議。

+0

有趣的一點。你能告訴我一個例子嗎?我沒有進入Obj-C,但我開始喜歡它。 – mslot 2009-07-14 21:34:09

1

這裏是rootviewcontrollerdelegate定義

@protocol RootViewControllerViewDelegate

- (無效)toggleView:(UIViewController中)newController的viewController:(UIViewController中)oldController;

@end

一個可能的實現,以toggleView

-(void)toggleView:(UIViewController *)newController viewController:(UIViewController*)oldController { 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:1]; 
[UIView setAnimationTransition:([oldController.view superview] ? UIViewAnimationTransitionFlipFromLeft : UIViewAnimationTransitionFlipFromLeft) forView:self.view cache:YES]; 
[newController viewWillAppear:YES]; 
[oldController viewWillDisappear:YES]; 
[oldController.view removeFromSuperview]; 
[self.view addSubview:newController.view]; 
[oldController viewDidDisappear:YES]; 
[newController viewDidAppear:YES]; 
[UIView commitAnimations]; 
[oldController release]; 

}

這將通過翻轉角度

顯然刷卡視圖控制器你必須做出新的RootViewController的地方,並從那裏開始(可能是應用程序代理)

現在,如果你想有一個視圖控制器能夠使用它必須符合協議的RootViewController的,你聲明它的類接口,像這樣

@interface MyViewController : UIViewController <RootViewControllerDelegate> { 
id delegate; 
}@property(assign) id <RootViewControllerViewDelegate> delegate; 

現在你可以使用委託方法交換了看法另一個因爲一切都已經初始化了。代碼交換兩個控制器的觀點可能看起來像這樣

NewViewController *viewController=... 
    //you can set up your viewControllers data here if you need to 
    //Since its probable that this view has that data it can just set it instead of 
    //delegating 
viewController.delegate=delegate; //setting up the RootViewController reference 
[delegate toggleView:viewController viewController:self]; 

記得在toggleView回調釋放舊的ViewController,如果你沒有你會得到一個泄漏,因爲你失去所有引用該控制器。