【发布时间】:2015-12-27 16:49:49
【问题描述】:
我希望分段控件的作用类似于页面浏览控制器页面底部的灰点。因此,当我向右滑动时,它会移动到右侧的段,当我向左滑动时,它会移动到左侧的段。当我正确单击特定段时,我已经得到它来更改页面(因此,如果我单击第一个段,它会移动到第一页)。但是,我似乎无法让代码完全按照我的意愿去做。现在我有以下代码:
- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers
{
if([pendingViewControllers count]>0)
{
NSUInteger index =[(MasterTableViewController*)[pendingViewControllers objectAtIndex:0] pageIndex];
segmentedControl.selectedSegmentIndex = index;
}
}
这很好用,但问题是它是在转换发生时调用的,而不是在它完成时调用的。因此,当我开始更改页面但随后停止时,它会移动该段。所以,我尝试了一些其他代码:
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
if(finished && completed && [previousViewControllers count]>0)
{
NSUInteger index =[(MasterTableViewController*)[previousViewControllers objectAtIndex:0] pageIndex];
segmentedControl.selectedSegmentIndex = index;
self.lastSelected = index;
}
}
这是在正确的时间调用的。如果我放置一个 NSLOG,它会在我完成转换时显示,这正是我想要的,但由于某种原因,segmentcontrol 落后了 1 步。因此,如果我从第 1 页转到第 2 页,则段保持在 1,然后如果我从第 2 页转到第 3 页,则段移动到 2,然后从那时起,无论哪一个,它都继续落后一步我去的方向。我玩过它,我似乎无法弄清楚逻辑。非常感谢您的帮助!
这里是辅助函数:
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
NSUInteger index = ((MasterTableViewController*) viewController).pageIndex;
if ((index == 0) || (index == NSNotFound)) {
return nil;
}
index--;
return [self viewControllerAtIndex:index];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
NSUInteger index = ((MasterTableViewController*) viewController).pageIndex;
if (index == NSNotFound) {
return nil;
}
index++;
// startingViewController.pageIndex = index;
if (index == [self.pageTitles count]) {
return nil;
}
return [self viewControllerAtIndex:index];
}
- (MasterTableViewController *)viewControllerAtIndex:(NSUInteger)index
{
if (([self.pageTitles count] == 0) || (index >= [self.pageTitles count])) {
return nil;
}
MasterTableViewController *pageContentViewController;
if (index == 0)
{
pageContentViewController = [storyboard instantiateViewControllerWithIdentifier:@"OnCampusTable"];
}
else if (index == 1)
{
pageContentViewController = [storyboard instantiateViewControllerWithIdentifier:@"OffCampusTable"];
}
else if (index == 2)
{
pageContentViewController = [storyboard instantiateViewControllerWithIdentifier:@"MyEventsTable"];
}
// pageContentViewController.titleText = self.pageTitles[index];
pageContentViewController.pageIndex = index;
return pageContentViewController;
}
任何被评论的东西都是我试图弄清逻辑的东西。我刚刚在运行 didFinishAnimating 的情况下运行了程序,并且 willTransitionToViewControllers 被注释掉了。这产生了滞后效应,其中分段控件位于单元格后面。非常感谢任何帮助
【问题讨论】:
标签: ios iphone uisegmentedcontrol uipageviewcontroller