【问题标题】:How do you change the detailViewController in a method如何更改方法中的 detailViewController
【发布时间】:2011-03-27 09:10:08
【问题描述】:

我有一个正在执行很多功能的视图,当我完成时,我想更改为newViewcontroller。如果我从我刚刚调用的根视图中执行此操作。

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

}

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

【问题讨论】:

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

标签: iphone xcode ipad view


【解决方案1】:

从 iOS8 开始,您可以在 UISplitViewController 上使用 -showDetailViewController:sender: 方法。请参阅Apple docs on UISplitViewController

【讨论】:

    【解决方案2】:

    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 参考:http://developer.apple.com/library/ios/#documentation/uikit/reference/UISplitViewController_class/Reference/Reference.html

    注意:不要尝试替换主 VC——它通常会以某种方式出现可怕的错误。 I tried many many ways 更换主人,总是以一些非常烦人的方式出错。替换细节VC就好了!

    【讨论】:

    • 我添加了我现在仍然有问题的内容。
    【解决方案3】:

    正如@chris 所说,您可以在 iOS 8 及更高版本中使用 UISplitViewController 的 Delegate,这是最好的方法。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-07
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      相关资源
      最近更新 更多