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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
fügen Sie den folgenden code in die pageViewController Methode viewWillAppear
dataSource = self
und in viewWillDisappear hinzufügen
dataSource = null
wird dadurch gezwungen, die pageViewController zu laden Sie Ihre dataSource
InformationsquelleAutor Ahmed Onawale
Zeigen die aktuelle dot, vergessen Sie nicht, Sie haben ein update der Seite Kennzeichen
Beispiel, wie Sie aktualisieren Sie Ihre UIPageControl Indikator https://stackoverflow.com/a/22576250/3897011
InformationsquelleAutor Leonardo Gomes Garcia
Nach einer langen Zeit und nach Verschwendung ein support-ticket bei Apple, habe ich beschlossen zu gehen mit einem anderen Ansatz.
In meinem Storyboard erstellt habe ich 2 verschiedene Navigations-Controller, einen für jeden Fall (wenn es
somethings
- und falls nicht vorhanden), und ich habe eine erste view-Controller, der aufviewDidAppear
, instanziiert der beiden und präsentiert es. Ich habe auf diese Weise stellen Sie sicher, dass die gesamte navigation-controller wird wieder korrekt geladen.InformationsquelleAutor Reapo
Um neu zu laden
UIPageViewController
Sie können den folgenden code verwenden:Bitte auch implementieren
Methode.
[self.pageController setViewControllers:@[yourCurrentController] direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
Und das Programm würde nicht laufen, wenn ich nicht viewControllerBeforeViewController. Es ist nur der Standardwert (wenn index - > 0 index--), so dass ich nicht kopieren Sie Sie in die FrageJa. In der viewDidLoad-Methode. Sollten Sie es wieder verwenden, wenn Sie möchten, um neu zu laden UIPageViewController.
wenn ich Anrufe, reloadViews, die Kommentarzeichen vor der viewDidLoad-Methode wird erneut aufgerufen.
Seltsam. BTW rufen Sie [super viewDidLoad]
Ja, ich weiß, es ist seltsam, und ich habe nicht in der Lage, um es herauszufinden, selber, deshalb Frage ich ja hier.
[super viewDidLoad]
Hinzugefügt wurde, ist die Frage.InformationsquelleAutor Sviatoslav Yakymiv