Frage So legen Sie die erste Seite in UIPageViewController fest


Wenn sich der Benutzer auf der ersten Seite von a befindet UIPageViewController und versucht zurückzugehen, ich gebe einfach null zurück. In iOS 5 funktioniert das gut. Es verursacht einen Absturz in iOS 6.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The number of view controllers provided (0) doesn't match the number required (1) for the requested transition'

Hier ist mein Code. Bei der Rückkehr contentViewController Anstatt von nil, es funktioniert gut. Was sollte ich statt setzen? nil?

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController 
  viewControllerBeforeViewController:(UIViewController *)viewController {

    contentViewController = [[ContentViewController_iPhone alloc] init];

    int currentIndex = [self.modelArray indexOfObject:[(ContentViewController_iPhone *)viewController labelContents]];

    if ((currentIndex == 0) || (currentIndex == NSNotFound)) {

        //if on the first page, can't go back
        return nil;

     }

    contentViewController.labelContents = [self.modelArray objectAtIndex:currentIndex - 1];

    return contentViewController;

}

5
2017-10-08 17:33


Ursprung


Antworten:


Ich hatte das gleiche Problem und fand heraus, dass es nur passiert, wenn ich die Delegierten des Pageviewcontrollers gesticRecognizers zu meinem eigenen Controller ändere (dies geschieht oft, wenn Sie das Paging abbrechen wollen, wenn ein Benutzer bestimmte Bereiche auf der Seite antippt, z.B. Tasten).

Für mich hat es geklappt, diese Neuzuweisung für iOS 6 nicht zu machen. Das ist in Ordnung, da iOS-Griffe ein bisschen anders berührt. Tasten oder eigene Gestenerkennung auf der Seite funktionieren unter iOS 6 einwandfrei, da sie Priorität haben und das Paging automatisch abbrechen.

Ich hoffe das hilft.


10
2017-10-13 11:05



Die neueste Version der Xcode-Vorlage für seitenbasierte Anwendungen enthält den folgenden Code:

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

index--;
return [self viewControllerAtIndex:index storyboard:viewController.storyboard];
}

Das sollte den Trick machen :-)


0
2017-10-08 18:33



Sie müssen Ihrem Code Folgendes hinzufügen

if (currentIndex == 0 || (index == NSNotFound)) {

    //if on the first page, can't go back
    return nil;

 }

0
2017-10-08 18:12