这可能是关于PageViewControllers或我的观点的一般管理的noob问题。
我有一个允许我滑动的PageViewController ......好吧,你知道它做了什么。在每个动态页面上,我都有一个标签,提供当前游戏状态消息和一个嵌入式UITableView,其中包含一系列玩家及其分数(参阅附件#1)。
当我点击播放器查看他们的个人资料,然后返回我的pageviewcontroller时,我看到的数据是我最初离开视图时的数据 - 这很好。但是......当我向前或向后滑动到后续页面时,该数据不会自行清除并在新刷过的视图中分层(参见附件#2)。此外,tableview应显示此屏幕没有分数。
第3次屏幕抓取显示应该的数据。
思考/评论,对任何人都很熟悉?
提前谢谢 : - )
修改
按要求添加了更多详细信息
数字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的分离。
当我离开这个视图并回到它时,是否有些东西没有正确地从内存中清除?
答案 0 :(得分:1)
我认为loadPages:
中的ScoringViewController
方法被调用两次,因为它是从viewWillAppear
调用的。首次显示VC时将调用viewWillAppear
,但在关闭配置文件视图控制器时也会调用pageViewControllers
。因此,您最终会得到两个viewDidLoad
,其中一个显示另一个{{1}}。如果您将代码移到{{1}},它应该可以正常工作。