2012-07-04 15 views
11

spędziłem prawie 8 godzin dowiedzieć się, jak przejść do określonego numeru strony w UIPageViewController ... poniżej jest co mój projekt wyglądaUIPageViewController - jak mogę przejść do określonego numeru strony?

Chcę złożyć aplikację, która wygląda jak iBooks ---

brałem pomoc od kodu przedstawionego tutaj - http://www.ioslearner.com/tag/uipageviewcontroller-sample-code/

zrobiłem plist i UITableView, ja wybrać wartość od tableview i wyświetlać takie same na Webview umieszczone na UIPAgeiewController, ale problemem jest to, że tylko strona w zmiany widoku strony internetowej, a nie faktyczny numer strony UIPageViewController ....

Jeśli zawęzić moje pytanie to wyglądałoby - czy istnieje sposób przełączania między numerami stron w UIPageViewController .... ???

+0

dlaczego to jest znakowany [Apex-code]? – vikingosegundo

+0

My Mistake ------ –

+0

przez przypadek masz pomysł, jak rozwiązać powyższy problem? @vikingosegundo –

Odpowiedz

5

Należy utworzyć instancję kontrolerów widoku, które zarządzają stronami, na które chcesz przeskoczyć, a następnie wywołać metodę setViewControllers:direction:animated:completion: kontrolera widoku strony, przekazując nowy kontroler widoku.

+0

Dostaję pomysł Ole o tym, co mówisz .. ale nie do końca ... czy możesz proszę opracuj to samo dla mnie ... Jestem trochę nowy w Xcode i spędziłem prawie 15 godzin nad tym samym problemem .. Dzięki z góry –

+0

Zobacz pytanie związane z Vikingosegundo w komentarzu. Jedna odpowiedź zawiera nawet przykładowy kod. –

2

używam tej funkcji (jestem zawsze w krajobraz, tryb 2 strona)

-(void) flipToPage:(NSString *)index { 


int x = [index intValue]; 
LeafletPageContentViewController *theCurrentViewController = [self.pageViewController.viewControllers objectAtIndex:0]; 

NSUInteger retreivedIndex = [self indexOfViewController:theCurrentViewController]; 

LeafletPageContentViewController *firstViewController = [self viewControllerAtIndex:x]; 
LeafletPageContentViewController *secondViewController = [self viewControllerAtIndex:x+1 ]; 


NSArray *viewControllers = nil; 

viewControllers = [NSArray arrayWithObjects:firstViewController, secondViewController, nil]; 


if (retreivedIndex < x){ 

    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL]; 

} else { 

    if (retreivedIndex > x){ 

     [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionReverse animated:YES completion:NULL]; 
     } 
    } 
} 

Może trzeba to zbyt

- (LeafletPageContentViewController *)viewControllerAtIndex:(NSUInteger)index { 

    if (([self.modelArray count] == 0) || (index >= [self.modelArray count])) { 
     return nil; 
    } 
    LeafletPageContentViewController *dataViewController; 
    dataViewController = [[LeafletPageContentViewController alloc]initWithNibName:@"LeafletPageContentViewController" bundle:nil]; 

    dataViewController.dataObject = [self.modelArray objectAtIndex:index]; 
    return dataViewController; 

} 
+0

Czy to działa dla Ciebie. –

+0

Tak, używam tej metody w aplikacji. Czy masz jakiś problem? – jcesarmobile

+0

ya, w moim kodzie tej linii "[self.pageViewController.viewControllers objectAtIndex: 0]; nie działa –

3

Oto kolejny przykład, jak przejść do strony z Parsed Indeks:

-(void)gotoPage:(int)index{ 


    SinglePageViewController *viewController = [self viewControllerAtIndex:index]; 

    UIPageViewControllerNavigationDirection direction; 
    if(_curIndex <= index){ 
     direction = UIPageViewControllerNavigationDirectionForward; 
    } 
    else 
    { 
     direction = UIPageViewControllerNavigationDirectionReverse; 
    } 


    if(_curIndex < index) 
    { 
     for (int i = 0; i <= index; i++) 
     { 
      if (i == index) { 
       [self.pageViewController setViewControllers:@[viewController] 
              direction:direction 
              animated:YES 
             completion:nil]; 
      } 
      else 
      { 
       [self.pageViewController setViewControllers:@[[self viewControllerAtIndex:i]] 
              direction:direction 
              animated:NO 
             completion:nil]; 

      } 
     } 
    } 
    else 
    { 
     for (int i = _curIndex; i >= index; i--) 
     { 
      if (i == index) { 
       [self.pageViewController setViewControllers:@[viewController] 
              direction:direction 
              animated:YES 
             completion:nil]; 
      } 
      else 
      { 
       [self.pageViewController setViewControllers:@[[self viewControllerAtIndex:i]] 
              direction:direction 
              animated:NO 
             completion:nil]; 

      } 
     } 
    } 

    _curIndex = index; 
} 
+0

Btw, _curIndex jest własnością NSUInteger, zadeklaruj ją w interfejsie() – miljan

2

@milijan odpowiedź działała świetnie. Oto szybka wersja jego odpowiedź:

func jumptoPage(index : Int) { 

    let vc = viewControllerAtIndex(index) 
    let direction : UIPageViewControllerNavigationDirection! 

    if currentIndex < index { 
     direction = UIPageViewControllerNavigationDirection.Forward 
    } 
    else { 
     direction = UIPageViewControllerNavigationDirection.Reverse 
    } 

    if (currentIndex < index) { 
     for var i = 0; i <= index; i++ { 
      if (i == index) { 
       self.newPageViewController.setViewControllers([vc], direction: direction, animated: true, completion: nil) 
      } 
      else { 
       self.newPageViewController.setViewControllers([viewControllerAtIndex(i)], direction: direction, animated: false, completion: nil) 
      } 
     } 
    } 
    else { 
     for var i = currentIndex; i >= index; i = i - 1 { 
      if i == index { 
       self.newPageViewController.setViewControllers([vc], direction: direction, animated: true, completion: nil) 
      } 
      else { 
       self.newPageViewController.setViewControllers([viewControllerAtIndex(i)], direction: direction, animated: false, completion: nil) 
      } 
     } 
    } 
currentIndex = index 
} 
2

Kod Swift:

func goToPage(index: Int) { 
    if index < viewControllers.count { 
     pageVC!.setViewControllers([viewControllers[index]], direction: .Forward, animated: true, completion: nil) 
    } 
} 
Powiązane problemy