所以我对 Obj-C 很陌生,并尝试查看示例代码和其他在线资源来回答我的问题,但我似乎找不到任何真正有帮助的东西。本质上,我想做的是将我在 Storyboard 中创建的多个 UIViewController 添加到 UIPageViewController - 我首先寻求帮助的地方是 Xcode 本身,使用 PageBased 应用程序的模板。这实际上很有帮助,我启动并运行了一个 PageController。然后我转向在线资源,但大多数(如果不是全部)使用单个 viewController (例如this http://www.appcoda.com/uipageviewcontroller-storyboard-tutorial/)。然后我转向 StackOverflow 并发现了以下内容 -如何实现利用多个 ViewController 的 UIPageViewController https://stackoverflow.com/questions/21641373/how-to-implement-uipageviewcontroller-that-utilizes-multiple-viewcontrollers。
上述资源让我到目前为止:
在 PageViewController.h 中:
#import <UIKit/UIKit.h>
@interface PageViewController : UIPageViewController <UIPageViewControllerDataSource>
@end
在 PageViewController.m 中:
#import "PageViewController.h"
@interface PageViewController ()
@end
@implementation PageViewController {
NSArray *viewControllers;
UIViewController *first;
UIViewController *second;
UIViewController *third;
UIViewController *fourth;
UIViewController *fifth;
}
- (UIViewController *)first {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Secondary" bundle:nil];
first = [sb instantiateViewControllerWithIdentifier:@"1"];
return first;
}
- (UIViewController *)second {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Secondary" bundle:nil];
second = [sb instantiateViewControllerWithIdentifier:@"2"];
return second;
}
- (UIViewController *)third {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Secondary" bundle:nil];
third = [sb instantiateViewControllerWithIdentifier:@"3"];
return third;
}
- (UIViewController *)fourth {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Secondary" bundle:nil];
fourth = [sb instantiateViewControllerWithIdentifier:@"4"];
return fourth;
}
- (UIViewController *)fifth {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Secondary" bundle:nil];
fifth = [sb instantiateViewControllerWithIdentifier:@"5"];
return fifth;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.dataSource = self;
// Aggancio il view controller iniziale.
[self setViewControllers:@[self.first]
direction:UIPageViewControllerNavigationDirectionForward
animated:YES
completion:nil];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
UIViewController *nextViewController = nil;
if (viewController == self.first) {
nextViewController = self.second;
}
if (viewController == self.second) {
nextViewController = self.third;
}
if (viewController == self.third) {
nextViewController = self.fourth;
}
if (viewController == fourth) {
nextViewController = self.fifth;
}
return nextViewController;
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
UIViewController *prevViewController = nil;
if (viewController == self.fifth) {
prevViewController = self.fourth;
}
if (viewController == self.fourth) {
prevViewController = self.third;
}
if (viewController == self.third) {
prevViewController = self.second;
}
if (viewController == self.second) {
prevViewController = self.first;
}
return prevViewController;
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
所有这些代码所做的就是加载第一个视图控制器,它是now可以滑动,但实际上并没有滑动到任何东西 - 这是为什么?我究竟做错了什么?上述资源使用标题和页面来创建视图,我真的不知道如何去做。有人介意引导我或推动我朝正确的方向前进吗?任何帮助将不胜感激。谢谢!
如果有人感兴趣,这里是完整的工作代码。我花了一段时间才把它做好,但最终效果很完美!
#import "PageViewController.h"
@interface PageViewController ()
@property (nonatomic, retain) UIViewController *first;
@property (nonatomic, retain) UIViewController *second;
@property (nonatomic, retain) UIViewController *third;
@property (nonatomic, retain) UIViewController *fourth;
@property (nonatomic, retain) UIViewController *fifth;
@end
@implementation PageViewController {
NSArray *viewControllers;
}
- (UIViewController *)first {
if (!_first) {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Secondary" bundle:nil];
_first = [sb instantiateViewControllerWithIdentifier:@"1"];
}
return _first;
}
- (UIViewController *)second {
if (!_second) {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Secondary" bundle:nil];
_second = [sb instantiateViewControllerWithIdentifier:@"2"];
}
return _second;
}
- (UIViewController *)third {
if (!_third) {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Secondary" bundle:nil];
_third = [sb instantiateViewControllerWithIdentifier:@"3"];
}
return _third;
}
- (UIViewController *)fourth {
if (!_fourth) {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Secondary" bundle:nil];
_fourth = [sb instantiateViewControllerWithIdentifier:@"4"];
}
return _fourth;
}
- (UIViewController *)fifth {
if (!_fifth) {
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Secondary" bundle:nil];
_fifth = [sb instantiateViewControllerWithIdentifier:@"5"];
}
return _fifth;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.dataSource = self;
// Aggancio il view controller iniziale.
[self setViewControllers:@[self.first]
direction:UIPageViewControllerNavigationDirectionForward
animated:YES
completion:nil];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
UIViewController *nextViewController = nil;
if (viewController == self.first) {
nextViewController = self.second;
}
if (viewController == self.second) {
nextViewController = self.third;
}
if (viewController == self.third) {
nextViewController = self.fourth;
}
if (viewController == self.fourth) {
nextViewController = self.fifth;
}
return nextViewController;
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
UIViewController *prevViewController = nil;
if (viewController == self.fifth) {
prevViewController = self.fourth;
}
if (viewController == self.fourth) {
prevViewController = self.third;
}
if (viewController == self.third) {
prevViewController = self.second;
}
if (viewController == self.second) {
prevViewController = self.first;
}
return prevViewController;
}
@end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)