0

私はかなり長い間UIPageViewControllerを機能させることに取り組んできました、そして結果の欠如は私を狂わせ始めています...

次のコードはチュートリアルの一部であり(私も動作しませんでした)、一部です。今は、各viewControllerに単一のラベルを表示させて、何かを追加する前にそれが機能することを確認できるようにしようとしています。

- (void)viewDidLoad
{
[super viewDidLoad];

vcArray = [self createViewControllers:1];
NSLog(@"TEST1");


self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
self.pageController.delegate = self;
self.pageController.dataSource = self;
NSLog(@"TEST2 %@", vcArray);
[self.pageController setViewControllers:vcArray direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];
[[pageController view] setFrame:[[self view] bounds]];
NSLog(@"TEST3");
[self addChildViewController:self.pageController];
[[self view] addSubview:[self.pageController view]];
[pageController didMoveToParentViewController:self];
NSLog(@"TEST4");

}

- (NSArray *) createViewControllers:(NSInteger)ammount{
NSMutableArray *array = [NSMutableArray new];
for (NSInteger i = 0; i <= ammount; i++) {
    PageContentViewController *pageContentViewController = [PageContentViewController new];
    UILabel *label = [UILabel new];
    label.text = @"STRING";
    pageContentViewController.view = label;
    [array addObject:pageContentViewController];
}
return array;
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
NSUInteger index = [self indexOfViewController:
                    (PageContentViewController *)viewController];
if ((index == 0) || (index == NSNotFound)) {
    return nil;
}

index--;
return [vcArray objectAtIndex:index];
}

- (UIViewController *)pageViewController:
(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
NSUInteger index = [self indexOfViewController:
                    (PageContentViewController *)viewController];
if (index == NSNotFound) {
    return nil;
}

index++;
if (index == [vcArray count]) {
    return nil;
}
return [vcArray objectAtIndex:index];
}

- (NSUInteger)indexOfViewController:(PageContentViewController *)viewController
{
return [vcArray indexOfObject:viewController.dataObject];
}

私が欠けているものがわかりますか?私はあまりにも多くのチュートリアルとスタックオーバーフローの質問を経験してきましたが、それは私をもっと混乱させました...

よろしくお願いします、トム

4

1 に答える 1

1

一般的なヒント:

使用しないでください[PageContentViewController new]、使用してください[[PageContentViewController alloc] initWithNibName:nil bundle:nil]。使用しないでください[UILabel new]、使用してください[[UILabel alloc] initWithFrame:CGZeroRect]

コードをステップスルーします。であるオブジェクトである必要があるものを確認しますnil。Objective-Cはnil、メソッドを呼び出したとしても、黙って物事を許可します。

于 2012-08-28T14:31:01.737 に答える