2011-10-13 142 views
94

任何人都可以點我創建一個自定義視圖控制器作爲容器視圖控制器的好例子嗎?我能找到的唯一文檔是UIViewController Class Reference中的幾段。我覺得我需要比這更多的信息,並且示例實現會很好。 Google一無所有。容器視圖控制器示例

我的方法特別感興趣:

transitionFromViewController:toViewController:duration:options:animations:completion: 
+0

你發現了一個比hypercrypt提到的這個以外的其他來源? –

+1

還沒有。如果我有時間,今天晚些時候我會再挖一次。看起來奇怪的是,由於它的重要性和實用性,它會有如此少的信息。我想知道它是否有問題,並且在改進後會有更好的記錄。 – Undistraction

+3

這讓我非常困惑。例如,視圖只能有一個嵌入式控制器。如果您想在該容器視圖上切換控制器,那該怎麼辦? –

回答

51

我迄今發現的最好的東西是WWDC 2011會議視頻Session 102 - Implementing UIViewController Containment

+1

同上。這不是我最喜歡的演示代碼示例,但它確實正確地實現了VC容器以及內存管理 - 當子視圖控制器不再可見時,它們的發佈非常重要。 – memmons

+1

不幸的是,如何使用ContainerViewController的演示無法正常工作,因爲他沒有在他的iPad上設置電子郵件:-( –

+0

該會話是否有代碼示例? –

10
+4

其實我已經發現,但不幸的是它是關於Ios4寫的,但是5已經做了重大改變。 Apple現在明確支持創建自定義視圖控制器容器,儘管他們似乎不想幫助我們制定如何使用它們。不過謝謝。 – Undistraction

+0

你能告訴我他們在哪兒說的嗎?不要懷疑你,只是好奇,因爲我也一直在努力。 – Peres

+4

不用擔心。我通過代碼看他的容器類,其中沒有使用任何下列方法:addChildViewController :, removeFromParentViewController, transitionFromViewController:toViewController:持續時間:選擇:動畫:完成:, willMoveToParentViewController:和 didMoveToParentViewController:裏面全是在更新的UIViewController的ios5文檔中提到。 – Undistraction

17
- (void)viewDidLoad{ 
    [super viewDidLoad]; 

    // I put self in a Navigation VC so we can use its right navigationbar 
    // item for triggering the transition 
    self.navigationItem.rightBarButtonItem = 
    [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit 
                target:self 
                action:@selector(button:)] 
                    autorelease]; 

    // create test1 and test2 instance (subclass UIViewController and 
    // also need to define their own nibs) 
    vc1 = [[test1 alloc]initWithNibName:@"test1" bundle:nil]; 
    vc2 = [[test2 alloc]initWithNibName:@"test2" bundle:nil]; 

    //add to the container vc which is self  
    [self addChildViewController:vc1]; 
    [self addChildViewController:vc2]; 

    //the entry view (will be removed from it superview later by the api) 
    [self.view addSubview:vc1.view]; 
} 

這個IBAction爲觸發兩個風投之間的過渡:

-(IBAction)button:(id)sender { 
    [self transitionFromViewController:vc1 
         toViewController:vc2 
           duration:0.5  
           options:UIViewAnimationOptionTransitionCurlDown 
          animations:nil 
          completion:nil]; 
} 
+1

這是一個很好的例子,但是這種情況下的內存管理可以改進:http://stackoverflow.com/a/8453677/849616更適合的解決方案 – Vive

+1

不是說你' [self addChildViewController:vc1]; 沒有意義。Container VC可能有多個Container View Controller。 –

+0

@Vive我已經在我的項目中達到了一個關注內存管理的地步。我有什麼特別的鏈接,你發佈的內存管理更好?我是非常新的,很難看到差異es – jacobronniegeorge

37
+2

+1提到哪裏可以得到那該死的代碼包。我一直在看它。 –

+6

+1,爲什麼o蘋果爲什麼不能在他們的成員頁面上放置WWDC會話代碼? – axello

+0

+1,你介意共享,如何獲得這個源代碼路徑? –

相關問題