Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#4

AW: UIPageViewController bestimmte Seite

  Alt 27. Jan 2014, 16:13
Das ist ähnlich, aber leider nicht 1:1 in CocoaTouch übersetzbar.
Der UIPageViewController ist Datasource getrieben und "navigiert" von der aktuellen Seite mit "prior" und "next" zwischen den Seiten.

Ich zeig Dir mal meins. Eventuell hilft es Dir ja ein Stück weiter.

Delphi-Quellcode:
method RootViewController.setupPageViewController(Sender:id);
begin
  // Das entspricht bei Dir sinngemäß FPager.Pages.Clear;
  ModelController.resetViewControllerCache;

  // Alle ViewController die noch irgendwo auf dem PageController gecachet "herumliegen " werden auch weggeworfen
  for i:Int32 :=0 to pageViewController.viewControllers.count-1 do begin
    pageViewController.viewControllers[i].removeFromParentViewController;
  end;

  // Hier ermittle ich den Index der Seite, bei der gestartet werden soll
  // pageData ist bei mir ein Array [2010,2011,2012,2013,2014,2015,2015]....
  // indexCurrentYear ist also "heute" = 4
  var indexCurrentYear :=
     ModelController.pageData.indexOfObject(currentYear);
    
  
  // Jetzt hole ich mir den einen ViewController (für das aktuelle Jahr) aus dem Model ...
  var lbeginningingViewController :=
     ModelController.viewControllerAtIndex(indexCurrentYear)
                                storyboard(storyboard);
  // ... und lege ihn als einziges Object in ein Array
  var lViewControllers := NSArray.arrayWithObject(lbeginningingViewController);

  // Zum Schluss gebe ich dem UIPageViewController das Array mit dem
  // StartViewController.
  pageViewController.setViewControllers(lViewControllers)
                              direction(UIPageViewControllerNavigationDirectionForward)
                               animated(false)
                             completion(nil);

  
  // PageViewController in den RootViewController einbetten und GestureRecognizer zuweisen
  addChildViewController(pageViewController);
  view.addSubview(pageViewController.view);
  view.gestureRecognizers := pageViewController.gestureRecognizers;
end;
Der PageViewController zeigt nun die Seite mit dem aktuellen Jahr an (bzw. startet auch gleich dort ohne "umzublättern").
Jede Seite (also jeder ViewController) hat eine Property, in der ich den aktuellen Seitenindex speichere.
Beim Blättern holt sich der UIPageViewController die vorhergehende bzw. nachfolgende Seite über die UIPageViewControllerDataSource Methoden "viewControllerBeforeViewController" und "viewControllerAfterViewController".
Dort lese ich die Property mit den aktuellen Seitenindex aus den aktuellen ViewController aus und hole mir den vorherigen bzw. nächsten ViewController aus dem Model.
  Mit Zitat antworten Zitat