分页导航

本文介绍了一种在iOS应用中实现分页视图的方法,包括如何使用UIPageViewController进行页面切换,以及如何通过StoryboardID定位不同的ViewController。通过具体代码示例展示了如何设置和初始化分页控制器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       同样的代码同样的步骤,今天重新做一遍,又能正确显示结果了,昨天早上在一个工程中,纠结很久都没纠结出个成果来,啦啦啦,现在开心了。据我猜测判断,出错的原因,可能在于,我把VIewCOntroller删了,又添加,删了又添加,循环几次,导致程序也弄不清哪个是父视图控制器,哪个是子视图控制器了吧。另外,原先错误工程中,我在子视图控制器中,将“storyboard ID”都添加了“page1”,“page2”等名称,而所谓的自我感觉为父视图控制器的VIewCOntroller,storyboard ID 这块什么都没写,然后运行时,程序出现警告“warning: Unsupported Configuration: Scene is unreachable due to lack of entry points and does not have an identifier for runtime access via -instantiateViewControllerWithIdentifier:.“(大意是为了在程序中动态访问Scene,需要给其设置一个Storyboard ID,所以给出了警告,解决方法:设置一个Storyboard ID即可),博客链接:http://blog.youkuaiyun.com/freedom2028/article/details/8589375,因此,我更加大胆参测,错误处在我对VIewController反复删除添加的操作上。好了,下面就说说步骤吧:

1,当然建立一个工程,在原有VIewController基础上,再添加三个ViewCOntroller,并将这三个ViewController的storyboard ID分别改为“page1”,“page2”,“page3”,同时向这三个子视图控制器中分别拖入imageVIew,并将image属性设置为supporting file中添加的图片的相应名称。(这每个子视图控制器的内容就是运行成果中每页显示的内容,当然,不只是imageVIew,我们还可以在每个子视图控制器中添加任意我们喜欢,希望看到的界面)

2,利用故事板的操作就是这些啦,其余的我们可以靠代码实现。分页显示需要“在一个父视图控制器中添加一个PageViewController分页控制器,然后分页控制器下面再加载所希望显示的子视图控制器”,在前面故事板中,我们只是设定了父视图控制和子视图控制器,因此在代码中,我们需要创建一个分页控制器。(前天晚上第一次做时,没有弄明白这一层关系啊)代码如下:

(1),.h文件:

#import <UIKit/UIKit.h>


@interface ViewController :UIViewController<UIPageViewControllerDataSource,UIPageViewControllerDelegate>



{


   int pageIndex;


}


@property(nonatomic,strong)UIPageViewController *pageViewController;




@end


(2),.m文件:

#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad

{

    [superviewDidLoad];

    

   self.view.frame=CGRectMake(0,0,320.0,420.0);

    

    //构建UIPageViewController实例,initWithTransitionStyle:定义翻页样式(翻书效果样式),navigationOrientation:定义翻页方向(水平方向)

    self.pageViewController=[[UIPageViewControlleralloc]initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurlnavigationOrientation:UIPageViewControllerNavigationOrientationHorizontaloptions:nil];

    

    self.pageViewController.delegate=self;

    self.pageViewController.dataSource=self;

    

   UIStoryboard *mainstoryboard=[UIStoryboardstoryboardWithName:@"Main"bundle:nil];

    

   UIViewController *page1ViewController=[mainstoryboardinstantiateViewControllerWithIdentifier:@"page1"];

    

    //第一个视图,作为pageViewController的首页,这句代码相当于代码:

    //NSArray *viewControllers=[NSArray arrayWithObject:page1ViewController,nil];

    

   NSArray *viewControllers=@[page1ViewController];

    

    //设定首页显示视图,显示视图与书脊有关

    [self.pageViewControllersetViewControllers:viewControllersdirection:UIPageViewControllerNavigationDirectionForwardanimated:YEScompletion:NULL];

    

    //pageViewController添加到父视图控制器中去

    [selfaddChildViewController:self.pageViewController];

    [self.viewaddSubview:self.pageViewController.view];

    

    pageIndex=0;

    

    

// Do any additional setup after loading the view, typically from a nib.

}


- (void)didReceiveMemoryWarning

{

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}



//返回当前视图控制器之前的视图控制器,用于上一页的显示


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

    

    pageIndex--;

    if(pageIndex<0){

        

       pageIndex=0;

       returnnil;

        

    }

    

    // Direction Forward=Forward Before;

    

    //获取故事板

   UIStoryboard *mainStoryboard=[UIStoryboardstoryboardWithName:@"Main"bundle:nil];

    

    //根据索引号,获取子视图控制器的ID

   NSString *pageID=[NSStringstringWithFormat:@"page%i",pageIndex+1];

    

    //根据ID,获取子视图控制器

   UIViewController *pvController=[mainStoryboardinstantiateViewControllerWithIdentifier:pageID];

   return pvController;

    

    

}



//返回当前视图控制器之后的视图控制器,用于下一页的显示

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

    

    pageIndex++;

    if(pageIndex>2){

        

       pageIndex=2;

       returnnil;

        

    }

    

    // Direction Forward=Forward After;

    

   UIStoryboard *mainstoryboard=[UIStoryboardstoryboardWithName:@"Main"bundle:nil];

    

   NSString *pageID=[NSStringstringWithFormat:@"page%i",pageIndex+1];

    

    

   UIViewController *pvController=[mainstoryboardinstantiateViewControllerWithIdentifier:pageID];

    

   return pvController;

    

    

}


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

    

    //单页翻动:

    self.pageViewController.doubleSided=NO;

    //定义书脊位置在书的最左边,书将从右向左翻动

    returnUIPageViewControllerSpineLocationMin;

    

}


@end


3,运行结果就能像翻书一样查看图片咯(次例书脊在左);

4,在这个例子的基础上,我改了一个小小操作,就是在不自定义PageVIewController,直接在故事板中拖入一个PageVIewController控件,将其stroyboard ID命名为“pageview”(这个storyboard ID可以从其字面意思理解到“在故事板中的地址”,我们可以根据这个地址在故事板中找到相应的视图控制器)。

代码主要是下面这段不同啦,我们不需要在.h文件中自定义pageViewController控件,更不需要在.m中对其进行初始化,要做的就是根据storyboard ID找到故事板中的分页视图控制器。

- (void)viewDidLoad

{

    [superviewDidLoad];

    

   self.view.frame=CGRectMake(0,0, 320.0,420.0);

    

    

   UIStoryboard *mainstoryboard=[UIStoryboardstoryboardWithName:@"Main"bundle:nil];

    

    

   UIPageViewController *pageViewController=[mainstoryboardinstantiateViewControllerWithIdentifier:@"pageview"];

    

    pageViewController.delegate=self;

    

    pageViewController.dataSource=self;

    

   UIViewController *page1ViewController=[mainstoryboardinstantiateViewControllerWithIdentifier:@"page1"];

    

    //第一个视图,作为pageViewController的首页,这句代码相当于代码:

    //NSArray *viewControllers=[NSArray arrayWithObject:page1ViewController,nil];

    

   NSArray *viewControllers=@[page1ViewController];

    

    //设定首页显示视图,显示视图与书脊有关

    [pageViewController setViewControllers:viewControllersdirection:UIPageViewControllerNavigationDirectionForwardanimated:YEScompletion:NULL];

    

    //pageViewController添加到父视图控制器中去

    [selfaddChildViewController:pageViewController];

    [self.viewaddSubview:pageViewController.view];

    

    pageIndex=0;

  

// Do any additional setup after loading the view, typically from a nib.

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值