2011-03-27 23 views
0

我有一個視圖正在執行很多功能,當我完成操作時,我想要更改爲newViewcontroller。如果我在rootview中從何處進行此操作,我只需致電。如何在方法中更改detailViewController

NewPageViewController *newDetailViewController = [[NewPageViewController alloc] initWithNibName:@"NewPageViewController" bundle:nil]; 
detailViewController = newDetailViewController; 

但我需要從我的舊的細節(右側)

我從右側下載的SPLITVIEW iPad應用程序文件,該文件被下載後,我需要在做我的方法將分割視圖的右側更改爲新的筆尖文件,以便我可以打開並編輯文件

有人能以正確的方式指向我。

現在我有:

-(void)changeView { 

    ListController *newDetailViewController = [[ListController alloc] initWithNibName:@"ListController"bundle:nil] 

    NSArray *viewControllers = [NSArray arrayWithObjects:[splitViewController.viewControllers objectAtIndex:0], newDetailViewController, nil]; 

    splitViewController.viewControllers = viewControllers; 
    [viewControllers release]; 

} 

-(void)downloadfile { 
//I do all my work and get the file. 
NSLog(@"I need to change views now."); 


       [self changeView]; 

} 

我沒有得到任何錯誤,但右側視圖沒有改變。

+1

嘿克里斯,你的問題不是很清楚。你到底想做什麼?如果你能以更好的方式解釋它,那麼我可以相應地幫助你。 :) – 2011-03-27 09:16:37

+0

你確定你的RHS視圖沒有改變嗎?是不是這種情況正在發生變化,但與已經存在的觀點沒有什麼不同?你是否在主線程上調用了下載文件? (你應該)。下載文件肯定會被調用?您的NSLog獲取輸出,對吧? – occulus 2011-03-28 12:15:03

+0

另外,放在一個NSLog檢查splitViewController是不是null - 你可能沒有連接從Interface Builder的IBOutlet? – occulus 2011-03-28 12:16:50

回答

8

UISplitViewController類有NSArray *viewControllers屬性。這個數組中的第一項是你的主VC,在細節VC中是第二項。重新分配這個屬性包含相同的主VC而是一個新的細節VC一個新的數組:

// don't forget to set the delegate of myNewDetailViewController appropriately! 
myNewDetailViewController.delegate = ... 

NSArray newVCs = [NSArray arrayWithObjects:[uiSplitVC.viewControllers objectAtIndex:0], myNewDetailViewController, nil]; 

uiSplitVC.viewControllers = newVCs; 

API參考爲UISplitViewController:http://developer.apple.com/library/ios/#documentation/uikit/reference/UISplitViewController_class/Reference/Reference.html

注意:不要試圖更換主VC - 它通常以某種方式出錯。代替主人的I tried many many ways,它總是以一些非常煩人的方式出錯。更換VC的細節很好!

+0

我加了我現在仍然有問題的東西。 – 2011-03-28 11:01:45

8

從iOS8開始,您可以在UISplitViewController上使用-showDetailViewController:sender:方法。請參閱Apple docs on UISplitViewController

+0

這應該是被接受的答案。 – 2016-06-29 16:45:18

0

由於@chris提到你可以使用UISplitViewController的iOS 8及更高版本的代理,這是最好的方式。

-(void)showDetailViewController:(UIViewController *)vc sender:(nullable id)sender NS_AVAILABLE_IOS(8_0); 
相關問題