【问题标题】:How to set page mode to single mode from double mode如何将页面模式从双模式设置为单模式
【发布时间】:2012-12-10 14:48:39
【问题描述】:

我们可以在不改变方向的情况下改变书脊位置吗?就像对于某些视图,它设置为最大值,对于某些视图,它应该是中间值。是否可以激活此功能。

这是我正在使用的代码,但不知道在其中修改什么,以便在不改变方向的情况下我可以将脊椎位置设置为最大并设置一页模式而不是两页模式。实际上是在应用程序运行时以两页模式开始的,但后来它需要移动到单页模式,这是不可能的,它会给出错误,即您提供一个视图但不需要两个视图。 谁能指导一下。

-(id)initWithViewControllers:(NSMutableArray *)Controllers
{
self = [super initWithNibName:nil bundle:nil];
if(self)
{
    self.VControllers =  Controllers;

    pageController = [[UIPageViewController alloc]initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation: UIPageViewControllerNavigationOrientationHorizontal options:nil];

    self.pageController.view.frame = CGRectMake(12.0f, 10.0f, 748.0f, 985.0f);
    self.pageController.delegate = self;
    self.pageController.dataSource = self;
    [self.pageController setViewControllers:[NSArray arrayWithObject:[VControllers objectAtIndex:0] ] direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:^(BOOL finished)
     {
     }];

    [self addChildViewController:self.pageController];
    [self.view addSubview:self.pageController.view];
    check=YES;
}

return self;
}


 - (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController
               spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation
{
 if(UIInterfaceOrientationIsPortrait(orientation))

{

 //Set the array with only 1 view controller
    UIViewController *currentViewController = [self.pageController.viewControllers objectAtIndex:0];
    NSArray *viewControllers = [NSArray arrayWithObject:currentViewController];
    [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];

    //Important- Set the doubleSided property to NO.
    self.pageController.doubleSided = NO;
    //Return the spine location
    return UIPageViewControllerSpineLocationMax;

 }

else
{
NSArray *viewControllers = nil;

    exampleViewController *currentViewController = [self.pageController.viewControllers objectAtIndex:0];

    NSUInteger currentIndex = [self.VControllers indexOfObject:currentViewController];

    if(currentIndex == 0 || currentIndex %2 == 0)
    {
        UIViewController *nextViewController = [self pageViewController:self.pageController viewControllerAfterViewController:currentViewController];
        viewControllers = [NSArray arrayWithObjects:currentViewController, nextViewController, nil];
    }
    else
    {
        UIViewController *previousViewController = [self pageViewController:self.pageController viewControllerBeforeViewController:currentViewController];
        viewControllers = [NSArray arrayWithObjects:previousViewController, currentViewController, nil];
    }
    //Now, set the viewControllers property of UIPageViewController
    [self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];

    return UIPageViewControllerSpineLocationMid;
}
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
int index = [self.VControllers indexOfObject:viewController];
i=index;
//[self checkViewControllers];
if (index - 1 >= 0)
{
    ind = index;
    return [self.VControllers objectAtIndex:index - 1];
}
return nil;
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
int index = [self.VControllers indexOfObject:viewController];
i=index;

if (index + 1 < [self.VControllers count])
{
    ind = index;
    return [self.VControllers objectAtIndex:index + 1];
}

if (ind1 + 1 < [self.VControllers count])
{
    ind = index;
    return [self.VControllers objectAtIndex:index + 1];
}
return nil;
}

【问题讨论】:

  • 你能说得更具体点吗?您可以在横向上使用您想要的任何脊椎位置。但是在纵向上,我认为您不能使用中间。虽然我认为你的问题比这更复杂。
  • 你在说什么?很高兴添加一些信息......我猜它是关于 pageViewControl 或类似的东西
  • 是的,它是关于 pageviewcontroller 的。问题是脊柱位置只有在方向改变时才会改变。我不知道如何在不使用脊椎定位方法的情况下更改它。

标签: iphone objective-c ipad uipageviewcontroller


【解决方案1】:

如果您想在 UIPageViewController 已经初始化后更改书脊位置,我认为您可能需要使用新的书脊位置创建一个新的,并用它替换旧的。

我猜当前的实现只考虑在初始化或改变方向时设置脊椎位置。

您可以为 Apple 打开一个错误,以便他们在未来实施。

【讨论】:

  • 但是如何关闭前一页视图控制器。
  • 您必须从 UIPageViewController 外部控制更改。要在两者之间进行转换,我会遵循这个问题的解决方案:stackoverflow.com/questions/8146253/…
  • 你找到解决办法了吗??我也面临同样的问题
猜你喜欢
  • 1970-01-01
  • 2014-01-17
  • 2017-04-26
  • 1970-01-01
  • 2020-12-26
  • 2018-03-06
  • 2020-02-22
  • 2011-05-26
  • 1970-01-01
相关资源
最近更新 更多