Nachladen-Ansichten in UIPageViewController

Mache ich eine iOS-Anwendung, die eine UIPageViewController geladen wird mit einer default-Seite, wenn Sie nicht vorhanden sind, andere noch hinzu, und ein Benutzer kann Seiten hinzufügen, wie er fortschreitet durch die app. Aber die erste Ansicht ändert sich nie, wie andere Hinzugefügt.

Habe ich versucht, die Antworten aus diesen Fragen:

Ist es möglich die Seite programmgesteuert in UIPageViewController?

Ändern UIPageViewController Seite programmgesteuert aktualisiert nicht die UIPageControl

Das entfernen einer view-controller aus UIPageViewController

Aktualisieren einer UIPageViewController

Keiner von Ihnen arbeiten für mich. Die Ansicht bleibt immer noch bei der ersten Seite, bis ich ein reload der Anwendung, nach denen die Seiten in Ordnung, und ich kann so viele hinzufügen, wie ich will.

Dies ist der code, den ich für die Herstellung der Seitenaufruf und die Seiten

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];

    self.pageController.dataSource = self;
    [[self.pageController view] setFrame:[[self pageControllerView] bounds]];

    UIViewController *initialViewController = [self viewControllerAtIndex:0];

    __block Page1ViewController *blocksafeSelf = self;

    //This doesn't work either... :(
    void (^completionBlock)(BOOL) = ^(BOOL finished)
    {
        //It seems that whenever the setViewControllers:
        //method is called with "animated" set to YES, UIPageViewController precaches
        //the view controllers retrieved from it's data source meaning that
        //the dismissed controller might not be removed. In such a case we
        //have to force it to clear the cache by initiating a non-animated
        //transition.
        usleep(1);
        dispatch_async(dispatch_get_main_queue(), ^(){
            [blocksafeSelf.pageController setViewControllers:@[initialViewController]
                                      direction:UIPageViewControllerNavigationDirectionForward
                                       animated:NO
                                     completion:nil];
        });
    };

    [self.pageController setViewControllers:@[initialViewController]
                              direction:UIPageViewControllerNavigationDirectionForward
                               animated:YES
                             completion:completionBlock];

    [self addChildViewController:self.pageController];
    [[self view] addSubview:[self.pageController view]];
    [self.pageController didMoveToParentViewController:self];
}

- (void)reloadViews
{
    [[self childViewControllers] makeObjectsPerformSelector:@selector(removeFromParentViewController)];
    [[self.view subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

    [self.pageController willMoveToParentViewController:nil];
    [self.pageController removeFromParentViewController];
    [self.pageController.view removeFromSuperview];
    self.pageController = nil;
    self.pageController = [[UIPageViewController alloc] init];

    [self.view setNeedsDisplay];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    NSUInteger index = ((SomethingViewController *)viewController).index;
    index++;

    if (index >= [Settings somethings].count)
    {
        return nil;
    }

    return [self viewControllerAtIndex:index];
}

- (UIViewController *)viewControllerAtIndex:(NSUInteger)index
{
    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Storyboard_iPhone"
                                              bundle:nil];
    if ([Settings somethings].count == 0 && index == 0)
    {
        NoSomethingViewController *vc = [sb instantiateViewControllerWithIdentifier:@"NoSomethingViewController"];
        vc.index = index;
        return vc;
    }

    SomethingViewController *childViewController = [sb instantiateViewControllerWithIdentifier:@"SomethingViewController"];
    childViewController.something = [[Settings somethings] somethingAtIndex:index];
    childViewController.index = index;

    return childViewController;
}

Wenn eine neue Seite erstellt werden soll, indem ein something im somethings array, ich nenne reloadViews aus der View-controller, hat das hinzufügen der something. Den code dann trifft der zweite Teil der viewControllerAtIndex, aber das ist nicht auf der Seite gezeigt, die ich sehen, auf das Telefon, als ich noch die NoSomethingViewController und es anzeigen.

Wenn Sie mehr code, ich werde stellen.

was Sie versuchen zu tun? Sie versuchen, um zu Blättern und in UIPageIndicator Seite ist nicht zu ändern, oder Sie versuchen, fügen Sie zusätzliche Seite einmal UIPageViewController geladen hat die Seite?
Ich versuche, die Seite neu laden-view-controller, um zu zeigen, eine andere Seite, wenn ich einen something
Ich glaube nicht, können Sie die Seite neu laden-view-controller, nachdem es geladen ist. Eine Sache, die Sie tun können, ist, wenn irgendeine Sache ist immer verändert dann entfernen Sie die Seite-View-controller von superview und fügen Sie es wieder so dynamische Seiten werden geladen, wenn eine Sache wird sich ändern.
Ich mache am Anfang des viewDidLoad Methode. wenn der page-controller bereits vorhanden ist, entfernen Sie Sie; erstellen Sie es neu. Es nicht tun.
Ja, aber wenn Sie, fügen Sie neue Seiten in der Seiten-Ansicht-controller damals auch entfernen Sie es aus superview und fügen Sie die Seite-view-controller wieder, indem Sie diese pageviewController delegieren wird wieder aufgerufen, und in pageviewcontroller Anzahl der Seiten wird automatisch aktualisiert.

InformationsquelleAutor Reapo | 2014-07-03

Schreibe einen Kommentar