将 UINavigationController 添加到 UIPageViewController

Posted

技术标签:

【中文标题】将 UINavigationController 添加到 UIPageViewController【英文标题】:Add UINavigationController into UIPageViewController 【发布时间】:2013-10-28 10:53:58 【问题描述】:

我用四个UIViewController 创建了一个UIPageViewController 使用情节提要,但我需要最后一个是UINavigationController。 有一种方法可以将UINavigationController 添加到UIPageViewController 否则将UIViewController 转换为UINavigationController

这是我的代码:

- (void)viewDidLoad

  [super viewDidLoad];
   self.dataSource = self ;

  [self setViewControllers:@[self.pagina1]direction:UIPageViewControllerNavigationDirectionReverse animated: YES   completion:nil  ];
UIImageView *backgroundImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"carbon.jpg"]];

  [self.view addSubview:backgroundImage];
  [self.view sendSubviewToBack:backgroundImage];
  // [backgroundImage release];





- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];





- (ViewControllerPagina1 *) home1 

    if( !_home1 )
    
        UIStoryboard *storyboard = self.storyboard ;
        _home1 = [storyboard instantiateViewControllerWithIdentifier:@"Prima pagina"] ;
    

    return _home1 ;


- (ViewControllerPagina2 *) home2 

    if( !_home2 )
    
        UIStoryboard *storyboard = self.storyboard ;
        _home2 = [storyboard instantiateViewControllerWithIdentifier:@"Seconda pagina"] ;
    

    return _home2 ;


- (ViewControllerPagina3 *) home3 

    if( !_home3 )
    
        UIStoryboard *storyboard = self.storyboard ;
        _home3 = [storyboard instantiateViewControllerWithIdentifier:@"Terza pagina"] ;
    

    return _home3 ;



- (UIViewController *) pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController

    UIViewController *nextViewController = nil ;

            if( viewController == self.home1 ) nextViewController = self.home2 ;
    else    if( viewController == self.home2 ) nextViewController = self.home3 ;
    else    if( viewController == self.home3 ) nextViewController = self.home1 ;
    return nextViewController ;



- (UIViewController *) pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController

    UIViewController *nextViewController = nil ;

    if( viewController == self.home1 ) nextViewController = self.pagina3 ;
    else    if( viewController == self.home2 ) nextViewController = self.home1 ;
    else    if( viewController == self.home3 ) nextViewController = self.home2 ;
    return nextViewController ;


其实“home3”是一个UIViewController, 我需要将它转换成UINavigationController

有什么想法吗?

【问题讨论】:

【参考方案1】:

不确定您要在这里做什么。但是,如果您需要在导航控制器中使用视图控制器,请创建导航控制器,将视图控制器添加到它的视图控制器数组中,然后将导航控制器(现在包含视图控制器)添加到您的页面控制器。

我真的不使用故事板。我以编程方式创建我的视图控制器。这很容易做到,我相信它比故事板更灵活。

【讨论】:

我需要相反的,将导航滚动条放入视图控制器。或者只将导航滚动条放入页面视图控制器。 好吧,我仍然不确定你在追求什么。无论如何,没有视图的导航控制器实际上并没有什么好处。此外,导航控制器是一个容器对象,而不是真正的视图,因此您不能只显示导航控制器而在其视图控制器数组中没有任何内容。

以上是关于将 UINavigationController 添加到 UIPageViewController的主要内容,如果未能解决你的问题,请参考以下文章

将 UIViewController 放在 UINavigationController 堆栈之上

将 UIViewController 添加到 UINavigationController 的问题

如何将 UIView 添加到 UINavigationController 堆栈

将 UINavigationBar 添加到没有 UINavigationController 的 UITableViewController

为啥我们将 UIViewController 传递给 UINavigationController 类?

如何将 CAGradientLayer 应用于 UINavigationController 背景