2011-03-27 20 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); 
相关问题