Ios 如何设置UIPageViewController

Ios 如何设置UIPageViewController,ios,xcode,uipageviewcontroller,Ios,Xcode,Uipageviewcontroller,我一直在寻找有关UIPageViewController设置的教程,因为有人建议不要使用我的导航控制器,而是使用PageView。我也在使用左右滑动手势,但我还没有在网上找到关于通过情节提要(或至少是大多数情节提要)设置UIPageViewController的好教程 我包括了一张我目前正在使用的图片: 如果您有任何关于PageViewController和以下控制器设置的帮助,我们将不胜感激 感谢您在advanced中提供的帮助,我相信如果您在Google上搜索它,您可以在那里找到一些教程,但

我一直在寻找有关UIPageViewController设置的教程,因为有人建议不要使用我的导航控制器,而是使用PageView。我也在使用左右滑动手势,但我还没有在网上找到关于通过情节提要(或至少是大多数情节提要)设置UIPageViewController的好教程

我包括了一张我目前正在使用的图片:

如果您有任何关于PageViewController和以下控制器设置的帮助,我们将不胜感激


感谢您在advanced中提供的帮助,我相信如果您在Google上搜索它,您可以在那里找到一些教程,但这应该会让您开始尝试自己的实现。我从“PageBase应用程序”模板开始创建了一个新项目。您应该学习提供给您的代码,尝试理解它的功能(同时阅读苹果在UIPageViewController上的文档)

该项目创建了几个对象。RootViewController创建页面视图控制器并将其添加为子视图控制器。对于我的测试应用程序,除了将页面视图控制器的转换样式更改为UIPageViewControllerTransitionStyleScroll(而不是page curl,但您也应该尝试原始值以查看其外观)之外,我没有更改此文件中的任何内容

ModelController类包含该模型,在您的示例中,该模型是一个图像名称数组(或我所说的名称片段)。此类实现处理翻页的页视图控制器数据源方法。我将该类中的init方法更改为

- (id)init {
    if (self = [super init]) {
        _pageData = @[@"1", @"2", @"3", @"4", @"5", @"6"]; // my images are named img1.JPG, img2.JPG, etc. I will use these numbers to construct the path to my files in the bundle
    }
    return self;
}
因此,您可以看到该模型只是一个数字字符串数组(每个图像一个数字)。根据图像的命名方式,您可能需要尝试不同的方法。在页面之间滑动时,此数组中的索引会递增或递减,并且数组中的值会传递给DataViewController并进入其dataObject属性

DataViewController是实际显示内容的控制器。它是故事板中的正确控制器。我修改了它的视图,在顶部添加了一个导航栏,这样我们就可以输入标题和按钮(转到tips视图控制器),并将UIView子视图替换为占据导航栏下整个屏幕的UIImageView。我打开了图像视图和导航栏。这是该控制器的已更改的.h文件

@interface DataViewController : UIViewController

@property (strong, nonatomic) NSString  *dataObject;
最后,在.m文件中,我让它看起来像这样

@interface DataViewController ()
@property (weak,nonatomic) IBOutlet UINavigationBar *bar;
@property (weak,nonatomic) IBOutlet UIImageView *iv;
@end

@implementation DataViewController


- (void)viewDidLoad{
    [super viewDidLoad];
    UINavigationItem *titleItem = self.bar.items[0];
    titleItem.title = [NSString stringWithFormat:@"Course Guide %@",self.dataObject];
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"img%@", self.dataObject] ofType:@"JPG"];
    self.iv.image = [UIImage imageWithContentsOfFile:imagePath];
}

-(void)dealloc {
    NSLog(@"in dealloc");
}
我使用initWithContentsOfFile:根据传递到数据对象的数字创建图像(而不是ImageName:因为它不缓存图像)。我实现dealloc是为了说明这样一个事实,即当您在页面中来回滑动时,控制器被释放,从而保持内存占用小。如果转换样式是页面卷曲,那么控制器一离开屏幕就被释放,因此一次不会有多个控制器。如果样式为滚动,则一次存在3个,因为页面视图控制器创建当前样式以及上一个和下一个样式,以加快加载速度


如您所见,我对模板提供给您的代码只做了一些小的更改,以便显示符合您目的的图像数组。与在导航控制器中使用一堆控制器相比,应用程序的这种结构将更加节省内存

谢谢你的深入回答。非常感谢。在“测试应用程序”中,您是否创建了两个Objective-C类,一个名为DataViewController(UIViewController的子类),另一个名为ModelViewController(UIViewController的子类)?除了放置代码的位置外,我了解大部分代码。例如,您提到init方法。init方法应该放在默认的viewcontroller.m中,还是放在您提到的新类中?最后两段代码也是如此。@user3743364,我没有创建任何新类,所有对象都已在模板中创建。如果您查看第一个代码块正上方的段落,它表示代码位于ModelController中。至于其他代码,您可以在代码中看到类的名称DataViewController。我使用Xcode 5.1创建了这个应用程序,所有的代码,除了我的小改动,都在模板中。我重新创建了每个代码片段,将(id)init放在默认模板viewcontroller.m中,第二个代码块放在viewcontroller.h中,最后一个代码块也放在viewcontroller.m中。我将导航栏和顶部的图像视图与IBOutlet连接起来,一切看起来都很顺利。Xcode说:“使用未声明的标识符'_pageData',我不太确定如何修复:另外,如果我的图像命名为(比如)golf1.png、golf2.png、golf3.png等…我将如何像您使用@“1”和@“2”一样将这些名称实现到.m文件中"etc@user3743364您从哪个模板开始,使用哪个版本的Xcode?这些不是正确的类。我使用的是Xcode 5.1.1,我使用的是带有故事板的单视图应用程序