【问题标题】:UIPageViewController not loading page content after accessing UITableView contentUIPageViewController 访问 UITableView 内容后未加载页面内容
【发布时间】:2015-04-10 23:29:57
【问题描述】:

这可能是关于 PageViewControllers 或我的视图的一般管理的菜鸟问题。

我有一个 PageViewController 可以让我滑动浏览...嗯,你知道它的作用。在这些动态页面中的每一个上,我都有一个提供当前游戏状态消息的标签和一个嵌入式 UITableView,其中包含玩家列表和他们的分数(见附件 #1)。

当我点击玩家查看他们的个人资料,然后返回到我的 pageviewcontroller 时,我看到的数据是我最初离开视图时的数据——这很好。但是......当我然后向前或向后滑动到后续页面时,该数据不会自行清除并分层在新滑动的视图之上(见附件#2)。此外,tableview 应该不会显示此屏幕的任何点。

第三个屏幕截图显示了数据应该的外观。

Thoughts / cmets,有没有人觉得眼熟?

提前致谢 :-)

编辑

应要求添加了更多详细信息

数字 2、“...”和“玩家 1 领先”部分都是在以下示例所示的 PageContentViewController 上找到的 UILabel。我的 ScoringViewController 实际上只负责设置页面视图,并加载后续页面。

ScoringViewController.m

-(void)loadPages:(int)startingPage {
    // Create page view controller
    self.pageViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageViewController"];
    self.pageViewController.dataSource = self;

    PageContentViewController *startingViewController = [self viewControllerAtIndex:startingPage];
    NSArray *viewControllers = @[startingViewController];

    // Advance to next page ("hole");
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

    // Change the size of page view controller
    self.pageViewController.view.frame = CGRectMake(
                                                0,
                                                0,
                                                self.view.frame.size.width,
                                                self.view.frame.size.height);

    [self addChildViewController:_pageViewController];
    [self.view insertSubview:_pageViewController.view atIndex:0];
    [self.pageViewController didMoveToParentViewController:self];
}

-(PageContentViewController *)viewControllerAtIndex:(NSUInteger)index { 
    // Create a new view controller and pass suitable data.
    PageContentViewController *pageContentViewController = [self.storyboard
                                                        instantiateViewControllerWithIdentifier:@"PageContentViewController"];

    pageContentViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"PageContentViewController"];
    pageContentViewController.pageIndex = index;

    return pageContentViewController;
}

PageContentViewController.m

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    // Add 1 to the page index since it's zero based.
    int tmpPageIndex = _pageIndex + 1;

    _lblCurrentHole.text = [NSString stringWithFormat:@"%d",tmpPageIndex];
}

在我的表视图的 configureCell 方法中,它只是点击了一个 leaderCheck 函数,然后显示了正确的消息。除此之外,真的没有别的了。如果我去个人资料页面然后回来,效果很好。

代码源于我不久前在 AppCoda 上找到的一个示例。 (http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/)。

编辑 包括一个带有颜色的内容视图的特写,以显示顶部的主视图和底部的表格视图的分离。

当我离开这个视图并返回它时,是否只是没有从内存中正确清除?

【问题讨论】:

  • 你能显示代码/故事板详细信息吗? 看起来您可能会在每次显示视图时为其添加标签。但我无法从图片中判断那是“内容页面”视图,还是表格视图单元格,或者......
  • 这些标签是在 tableView 单元格中,还是直接在页面内容视图中?
  • 标签在页面内容视图中。 TableView 只有球员的姓名/分数。我将为视图添加一些颜色,以便在视觉上更好地将它们分开。
  • 谢谢,非常有用的图片。从哪里调用loadPages:。可以调用两次吗?
  • 我认为这可能是您的问题的一部分 - ScoringViewController 的 viewWillAppear 将在首次显示时被调用,而且在配置文件视图控制器被关闭时也会被调用。因此,您最终得到了两个 pageViewController,(可能)一个通过另一个显示。如果该代码在 viewDidLoad 中,它是否有效?

标签: ios objective-c uitableview delegates uipageviewcontroller


【解决方案1】:

我认为ScoringViewController 中的loadPages: 方法被调用了两次,因为它是从viewWillAppear 调用的。 viewWillAppear 将在首次显示 VC 时调用,并且在关闭配置文件视图控制器时也会调用。因此,您最终会得到两个pageViewControllers,其中一个通过另一个显示。如果您将该代码移至viewDidLoad,它应该可以正常工作。

【讨论】:

    猜你喜欢
    • 2013-12-30
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多