从模态控制器刷新UIViewController

时间:2013-04-16 16:50:19

标签: ios

我有一个显示轮播控件(iCarousel)的视图控制器。视图呈现正确,并显示轮播。在此之后,会显示一个模式,允许用户同意某些条款。我希望一旦他们同意我刷新包含轮播控件的viewcontroller。基本上,我想将轮播旋转到一些随机索引。

- (IBAction)accept:(id)sender
{
    NewsViewController *newsViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"NewsStoryboard"];

    [newsViewController loadNews];  
    [newsViewController.view setNeedsDisplay]; 



    [self dismissViewControllerAnimated:YES completion:nil];
}

上面的代码确实调用loadNews并获取它,但视图永远不会刷新。

2 个答案:

答案 0 :(得分:2)

旋转木马会发生什么应该由管理它的视图控制器决定,而不是模态视图控制器。让模态控制器完成它的工作并将它收集的任何数据返回给它的父级。然后父母(在这种情况下,轮播的控制器)可以查看该数据并决定下一步需要做什么(例如刷新)。

答案 1 :(得分:0)

问题在于这一行:

    NewsViewController *newsViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"NewsStoryboard"];

那不是旧视图控制器;它是该视图控制器的一个新的,未使用的副本。您需要创建从模态视图控制器返回到现有视图控制器的通信线。

执行此操作的典型方法是通过委托,您在创建模态视图控制器时设置该委托。如果你看一下Xcode Utility模板,你会发现它说明了这种架构。原始视图控制器将自身设置为模态视图控制器的委托,因此模态视图控制器能够在解除原始视图控制器时与其进行对话。

能够做到这一点非常重要我在书中详细讨论了它:

http://www.apeth.com/iOSBook/ch19.html#_presented_view_controller