Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在方法中更改detailViewController_Iphone_Xcode_Ipad_View - Fatal编程技术网

Iphone 如何在方法中更改detailViewController

Iphone 如何在方法中更改detailViewController,iphone,xcode,ipad,view,Iphone,Xcode,Ipad,View,我有一个正在执行许多功能的视图,当我完成时,我想更改为newViewcontroller。如果我从rootview中找到了执行此操作的位置,我只需打电话 NewPageViewController *newDetailViewController = [[NewPageViewController alloc] initWithNibName:@"NewPageViewController" bundle:nil]; detailViewController = newDetailViewCon

我有一个正在执行许多功能的视图,当我完成时,我想更改为
newViewcontroller
。如果我从rootview中找到了执行此操作的位置,我只需打电话

NewPageViewController *newDetailViewController = [[NewPageViewController alloc] initWithNibName:@"NewPageViewController" bundle:nil];
detailViewController = newDetailViewController;
但我需要从我的旧细节(右侧)开始

我正在从右侧下载splitview iPad应用程序中的文件,下载文件后,我需要在我的方法中将splitview的右侧更改为新的nib文件,以便打开和编辑该文件

有人能给我指出正确的方向吗

现在我有:

-(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];

}

我没有收到任何错误,但右侧视图没有更改。

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;
UISplitViewController的API参考:


注意:不要尝试更换主VC——它通常会以某种方式出现可怕的错误。在更换主机的过程中,它总是以一些非常恼人的方式出错。更换细节VC是好的,虽然

从iOS8开始,您可以在UISplitViewController上使用
-showDetailViewController:sender:
方法。请参阅@chris提到的。

,您可以使用iOS 8及以上版本的UISplitViewController的委托,这是最好的方法

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

嘿,克里斯,你的问题不是很清楚。你到底想做什么?如果你能更好地解释它,那么我可以相应地帮助你。:)您确定您的RHS视图没有更改吗?是不是它正在改变,但看起来与已经存在的视图没有什么不同?顺便说一句,你正在主线程上调用downloadfile吗?(你应该是)。下载文件肯定会被调用吗?您的NSLog会得到输出,对吗?另外,输入一个NSLog来检查splitViewController是否为空-您可能没有从Interface Builder连接IBOutlet?好的,它看起来为空。断言失败:(splitViewController.viewControllers!=nil),函数-[ListController changeView],那么您是否连接了UISplitViewController?听起来你好像忘了。这解决了你的问题吗?我补充了我现在仍然有一个问题。