2015-02-28 1 views
1

J'ai un UIPageViewController, que j'élever programatically, j'ai écrasé le viewControllerBeforeViewController et les viewControllerAfterViewController méthodes pour créer les dinamically viewcontrollers après chaque flip. Le problème est que lorsque je ne termine pas le mouvement de la page de bascule et que le contrôleur de vue précédent revient à la vue, le même contrôleur de vue reste sur l'arrière-plan de la vue, jouant avec le contenu que j'affiche. J'ai essayé d'utiliser la méthode de rappel du UIPageViewController délégué pageViewController didFinishAnimating et à l'intérieur de cette méthode, je reçois les messages que j'ai l'intention d'obtenir, donc quand une animation n'est pas terminée, je peux y réagir, mais quand je rafraîchis le UIPageViewController en définissant son contrôleur de vue actuel, le problème persiste, voici le code:UIPageViewController garder ViewController précédent sur l'arrière-plan de la vue

(void)pageViewController:(UIPageViewController *)pageViewController 
     didFinishAnimating:(BOOL)finished 
    previousViewControllers:(NSArray *)previousViewControllers 
     transitionCompleted:(BOOL)completed { 
    if (!completed) 
    { 
    [self viewDidAppear:NO]; 
    for (UIViewController* vc in previousViewControllers) { 
     [self setViewControllers: @[vc] 
         direction: UIPageViewControllerNavigationDirectionForward 
         animated: NO 
         completion: nil]; 
    } 
    return; 
    } 

    } 

la question est la suivante: Comment puis-je « propre » ou « rafraîchir » ou « claire » le contenu de mon UIPageViewController pour supprimer la vue résiduelle et afficher uniquement celle qui est prévue.

Répondre

0

J'ai eu/j'ai un problème similaire. J'utilise un UIPageViewController qui peut charger différents PageContentView selon le compte (qui est commutable). J'utilisais le code suivant pour supprimer le PageContent existant qui a travaillé dans une certaine mesure:

[[self.pageViewController.childViewControllers objectAtIndex:0] willMoveToParentViewController:nil]; 
[[self.pageViewController.childViewControllers objectAtIndex:0].view removeFromSuperview]; 
[[self.pageViewController.childViewControllers objectAtIndex:0] removeFromParentViewController]; 

Mais quand je chipé à un écran qui n'a pas été le premier écran, puis a changé le UIPageViewController/PageContentView Je pouvais voir la contenu existant derrière le nouveau contenu. Je l'ai regardé de plus près et j'ai vu que dans les sous-vues de mon UIViewController j'avais un objet appelé _UIPageViewControllerContentView.

J'ai donc écrit ce morceau de code pour l'enlever et cela semble avoir aidé.

for (id obj in self.view.subviews) { 
    if ([[NSString stringWithFormat:@"%@", [obj class] ] isEqualToString:@"_UIPageViewControllerContentView"]) { 
     [obj removeFromSuperview]; 
    } 
} 

Espérons que cela aide.