我有一个显示轮播控件(iCarousel)的视图控制器。视图呈现正确,并显示轮播。在此之后,会显示一个模式,允许用户同意某些条款。我希望一旦他们同意我刷新包含轮播控件的viewcontroller。基本上,我想将轮播旋转到一些随机索引。
- (IBAction)accept:(id)sender
{
NewsViewController *newsViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"NewsStoryboard"];
[newsViewController loadNews];
[newsViewController.view setNeedsDisplay];
[self dismissViewControllerAnimated:YES completion:nil];
}
上面的代码确实调用loadNews并获取它,但视图永远不会刷新。
答案 0 :(得分:2)
旋转木马会发生什么应该由管理它的视图控制器决定,而不是模态视图控制器。让模态控制器完成它的工作并将它收集的任何数据返回给它的父级。然后父母(在这种情况下,轮播的控制器)可以查看该数据并决定下一步需要做什么(例如刷新)。
答案 1 :(得分:0)
问题在于这一行:
NewsViewController *newsViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"NewsStoryboard"];
那不是旧视图控制器;它是该视图控制器的一个新的,未使用的副本。您需要创建从模态视图控制器返回到现有视图控制器的通信线。
执行此操作的典型方法是通过委托,您在创建模态视图控制器时设置该委托。如果你看一下Xcode Utility模板,你会发现它说明了这种架构。原始视图控制器将自身设置为模态视图控制器的委托,因此模态视图控制器能够在解除原始视图控制器时与其进行对话。
能够做到这一点非常重要我在书中详细讨论了它:
http://www.apeth.com/iOSBook/ch19.html#_presented_view_controller