Ios 带有编程生成视图数组的UIPageViewController
所以我需要创建一个UIPageViewController来显示几个视图(1-25)Ios 带有编程生成视图数组的UIPageViewController,ios,xcode,viewcontroller,uipageviewcontroller,Ios,Xcode,Viewcontroller,Uipageviewcontroller,所以我需要创建一个UIPageViewController来显示几个视图(1-25)基本上我有一个测验应用程序,对于每一个错误的问题,我都会将问题编号(1-25)保存在NSMutableArray中。测试完成后,我想向用户显示哪个测试答案是错误的。我有设置错误答案视图的方法(与我在测验中设置视图的方法相同)。 这一直给我“Thread1:”错误 PVCPagesViewController.h #import <UIKit/UIKit.h> #import "PVCContentVi
基本上我有一个测验应用程序,对于每一个错误的问题,我都会将问题编号(1-25)保存在NSMutableArray中。测试完成后,我想向用户显示哪个测试答案是错误的。我有设置错误答案视图的方法(与我在测验中设置视图的方法相同)。 这一直给我“Thread1:”错误
PVCPagesViewController.h
#import <UIKit/UIKit.h>
#import "PVCContentViewController.h"
@interface PVCPagesViewController : UIViewController <UIPageViewControllerDataSource, UIPageViewControllerDelegate>
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;
@end
我从这里借用了start源代码:
我的源代码:
请让我知道如果你需要更多的信息 您是否尝试过直接使用
self.pages
数组设置pageController
[self.pageController设置视图控制器:页面方向:UIPageViewControllerNavigationDirectionForward动画:未完成:nil]代码>
我不认为再创建一个数组(viewControllers
)有什么意义。可能这会在尝试获取下一页时引起问题,因为pageController
只有一个viewController
([self.pages objectAtIndex:0]
),但是“数据源”说它应该有更多基于self.pages.count
的断点,你试过在上面设置断点吗?我仍然得到相同的线程1:EXC\u BAD\u ACCESS error?我知道,但它应该告诉你代码中哪里有错误。另外,检查示例:
方法在PVCContentViewController.m
中,并使用访问器获取标签属性(self.label1…
)是的,它告诉我代码在这里中断:[self.pageController设置ViewController:ViewController方向:UIPageViewControllerNavigationDirectionForward动画:无完成:无];
self.label
使它在没有警告的情况下打开应用程序,但现在我不工作在PVCPagesViewController上加载PVCContentViewController,我可能可以使用它!划掉它。它“起作用”只是因为它从未真正加载viewcontroller对象。它尝试:PVCContentViewControllerr*page1=[[UIStoryboard Storyboard with name:@“Main”bundle:nil]instanceeviewController WithiIdentifier:@“content”];
但我又遇到了同样的错误….?嘿,伙计,我成功了,谢谢你花了这么多时间,帮了我很多忙!我就是这样做的:非常感谢你的帮助
PVCPagesViewController.m
#import "PVCPagesViewController.h"
@interface PVCPagesViewController () {
NSArray *pages;
}
@property (retain, nonatomic) NSArray *pages;
@property (strong, nonatomic) UIPageViewController *pageController;
@end
@implementation PVCPagesViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
//I think my problem is around here?
PVCContentViewController *page1 = [[PVCContentViewController alloc] init];
[page1 example1];
PVCContentViewController *page2 = [[PVCContentViewController alloc] init];
[page1 example2];
PVCContentViewController *page3 = [[PVCContentViewController alloc] init];
[page1 example3];
PVCContentViewController *page4 = [[PVCContentViewController alloc] init];
[page1 example2];
// load the view controllers in our pages array
self.pages = [[NSArray alloc] initWithObjects:page1, page2, page3, page4, nil];
self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
[self.pageController setDelegate:self];
[self.pageController setDataSource:self];
[[self.pageController view] setFrame:[[self view] bounds]];
NSArray *viewControllers = [NSArray arrayWithObject:[self.pages objectAtIndex:0]];
[self.pageControl setCurrentPage:0];
[self.pageControl addTarget:self action:@selector(changePage:) forControlEvents:UIControlEventValueChanged];
[self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
[self addChildViewController:self.pageController];
[self.view addSubview:self.pageControl];
[[self view] addSubview:[self.pageController view]];
[self.pageController didMoveToParentViewController:self];
[self.view sendSubviewToBack:[self.pageController view]];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
NSUInteger currentIndex = [self.pages indexOfObject:viewController]; // get the index of the current view controller on display
[self.pageControl setCurrentPage:self.pageControl.currentPage+1]; // move the pageControl indicator to the next page
// check if we are at the end and decide if we need to present the next viewcontroller
if ( currentIndex < [self.pages count]-1) {
return [self.pages objectAtIndex:currentIndex+1]; // return the next view controller
} else {
return nil; // do nothing
}
}
- (UIViewController *) pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
NSUInteger currentIndex = [self.pages indexOfObject:viewController]; // get the index of the current view controller on display
[self.pageControl setCurrentPage:self.pageControl.currentPage-1]; // move the pageControl indicator to the next page
// check if we are at the beginning and decide if we need to present the previous viewcontroller
if ( currentIndex > 0) {
return [self.pages objectAtIndex:currentIndex-1]; // return the previous viewcontroller
} else {
return nil; // do nothing
}
}
- (void)changePage:(id)sender {
UIViewController *visibleViewController = self.pageController.viewControllers[0];
NSUInteger currentIndex = [self.pages indexOfObject:visibleViewController];
NSArray *viewControllers = [NSArray arrayWithObject:[self.pages objectAtIndex:self.pageControl.currentPage]];
if (self.pageControl.currentPage > currentIndex) {
[self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
} else {
[self.pageController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionReverse animated:NO completion:nil];
}
}
@end
PVCContentViewController.h
#import <UIKit/UIKit.h>
#import "PVCPagesViewController.h"
@interface PVCContentViewController : UIPageViewController
@property (weak, nonatomic) IBOutlet UILabel *label1;
@property (weak, nonatomic) IBOutlet UILabel *label2;
@property (weak, nonatomic) IBOutlet UILabel *label3;
-(void)example1;
-(void)example2;
-(void)example3;
@end
PVCContentViewController.m
#import "PVCContentViewController.h"
@interface PVCContentViewController ()
@end
@implementation PVCContentViewController
@synthesize label3,label2,label1;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#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.
}
*/
-(void)example1{
label1.text = @"View 1";
label2.text = @"View 1";
label3.text = @"view 1";
}
-(void)example2{
label1.text = @"View 2";
label2.text = @"View 2";
label3.text = @"view 2";
}
-(void)example3{
label1.text = @"View 3";
label2.text = @"View 3";
label3.text = @"view 3";
}
@end