UIPageViewController 委托、数据源和接口错误
Posted
技术标签:
【中文标题】UIPageViewController 委托、数据源和接口错误【英文标题】:UIPageViewController delegate, dataSource, & interface error 【发布时间】:2017-05-08 01:58:09 【问题描述】:我正在开发一个使用 UIPageViewController 的应用程序,以便我可以从左向右滑动以浏览页面 (ViewControllers)。自从我的原始帖子以来,我已经编写了代码。但我收到三个错误。
错误 1:在“IntroPages”类型的对象上找不到属性“delegate” 错误 2:在“IntroPages”类型的对象上找不到属性“dataSource” 错误 3:“IntroPages”没有可见的@interface 声明选择器“setViewControllers:direction:animated:completion:”
所有三个错误都在 viewDidLoad 的第一部分(部分在 大括号中)。前两个是 viewDidLoad 下面的代码,第三个是 5 行。
委托和数据源在 .h 文件中被引用。为什么他们没有被发现?为什么“IntroPages”没有可见的@interface?
代码如下。
IntroPages.h
#import <UIKit/UIKit.h>
@interface IntroPages : UIViewController
<UIPageViewControllerDelegate, UIPageViewControllerDataSource>
@end
IntroPages.m
#import "IntroPages.h"
@interface IntroPages ()
@end
@implementation IntroPages
NSArray *myViewControllers;
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
self.delegate = self;
self.dataSource = self;
UIViewController *p1 = [self.storyboard
instantiateViewControllerWithIdentifier:@"Intro1ID"];
UIViewController *p2 = [self.storyboard
instantiateViewControllerWithIdentifier:@"Intro2ID"];
UIViewController *p3 = [self.storyboard
instantiateViewControllerWithIdentifier:@"Intro3ID"];
UIViewController *p4 = [self.storyboard
instantiateViewControllerWithIdentifier:@"Intro4ID"];
myViewControllers = @[p1,p2,p3,p4];
[self setViewControllers:@[p1]
direction:UIPageViewControllerNavigationDirectionForward
animated:NO completion:nil];
NSLog(@"loaded!");
@end
【问题讨论】:
那么你面临的问题是什么......以及你尝试了什么......?发布你的代码。 我编辑了我所在位置的帖子。包含代码。 【参考方案1】:如果页面不是太多,您可以创建一个视图控制器数组,其中包含一组 id,如下所示:
// assuming this
@property (strong, nonatomic) IBOutlet UIPageViewController *pageViewController;
@property (strong, nonatomic) NSArray *pages;
// then, to setup, say these are the page ids...
NSArray *vcIds = @[ @"id0", @"id1", ... ];
self.pages = [NSMutableArray array];
for (NSString *vcId in vcIds)
UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:vcId];
[self.pages addObject:vc];
[self.pageViewController setViewControllers:self.pages direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
UIPageViewControllerDataSource 在给定 vc 之前和之后请求视图控制器。通过在 pages 数组中查找传递的 vc 得到正确的结果...
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
NSUInteger index = [self.pages indexOfObject:viewController];
return (index)? self.pages[index-1] : 0;
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
NSUInteger index = [self.pages indexOfObject:viewController];
return (index<self.pages.count-1)? self.pages[index+1] : self.pages[self.pages.count-1];
【讨论】:
数组中只有 5 个页面。您提供的代码与我在教程中看到的类似。该教程在数组中包含标题和图像,但它们实际上并未分配给 VC。他们只是从阵列中拉出来创建一个 vc。我假设从数组中调用实际的 vcs 是相似的。感谢您的帮助。 我是否正确假设使用它的故事板将包括原始视图控制器 -> 页面视图控制器 -> 将从数组中调用的任何视图? @thejdah,是的。事实上,我们在建议的代码中使用self.storyboard
获得故事板,因此要求self
的vc 定义在与具有这些ID 的vc 相同的故事板中。如果您需要在不同的故事板中定义 vcs,请告诉我,我可以向您展示如何做到这一点
所有这些都在实现文件中?
是的,虽然属性在界面中,可能在你的 .m 文件或 .h 文件中以上是关于UIPageViewController 委托、数据源和接口错误的主要内容,如果未能解决你的问题,请参考以下文章
UIPageViewController 委托、数据源和接口错误
UIPageViewController 委托方法类似于 scrollViewDidScroll:(UIScrollview*)scrollview