Szukaj…


Wprowadzenie

UIPageViewController zapewnia użytkownikom możliwość łatwego przechodzenia między kilkoma widokami za pomocą gestu przeciągnięcia. Aby utworzyć UIPageViewController, musisz zaimplementować metody UIPageViewControllerDataSource. Należą do nich metody zwracania zarówno UIPageViewController przed bieżącym UIPageViewController, jak i po nim, a także metody prezentacjiCount i prezentacjiIndex.

Składnia

  1. UIPageViewControllerTransitionStyle
  2. UIPageViewControllerNavigationOrientation
  3. UIPageViewControllerSpineLocation
  4. UIPageViewControllerNavigationDirection

Uwagi

Referencje dla programistów Apple tutaj

Utwórz programowo stronicowanie poziome UIPageViewController

  1. Początkowa tablica kontrolerów widoku, które będą zarządzane przez UIPageViewController. Dodaj podstawową klasę kontrolera widoku, która ma identifier właściwości, który będzie używany do identyfikacji kontrolerów widoku podczas pracy z metodami źródła danych UIPageViewController. Niech kontrolery widoku dziedziczą po tej klasie bazowej.
UIViewController *firstVC = [[UIViewController alloc] init]; 
firstVC.identifier = 0  
UIViewController *secondVC = [[UIViewController alloc] init];   
secondVC.identifier = 1
NSArray *viewControllers = [[NSArray alloc] initWithObjects: firstVC, secondVC, nil];
  1. Utwórz instancję UIPageViewController.
UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
                                                                           navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                                                                                         options:nil];
  1. Źródło danych to bieżąca klasa, która musi implementować protokół UIPageViewControllerDataSource .
pageViewController.dataSource = self;
  1. setViewControllers doda tylko pierwszy kontroler widoku, następnie zostanie dodany do stosu przy użyciu metod źródła danych
if (viewControllers.count) {
    [pageViewController setViewControllers:@[[viewControllers objectAtIndex:0]]
                                 direction:UIPageViewControllerNavigationDirectionForward
                                  animated:NO
                                completion:nil];
}
  1. Dodaj UIPageViewController jako kontroler widoku dziecko tak otrzyma od jego rodzic widok kontroler appearance i rotation wydarzeń.
 [self addChildViewController:pageViewController];
 pageViewController.view.frame = self.view.frame;
 [self.view addSubview:pageViewController.view];
 [pageViewController didMoveToParentViewController:self];
  1. Implementowanie metod UIPageViewControllerDataSource
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
      viewControllerBeforeViewController:(UIViewController *)viewController
{
    index = [(Your View Controler Base Class *)viewController identifier];
    index--;
    return [self childViewControllerAtIndex:index];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
       viewControllerAfterViewController:(UIViewController *)viewController
{
    index = [(Your View Controler Base Class *)viewController identifier];
    index++;
    return [self childViewControllerAtIndex:index];
}

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController
{
    return [viewControllers count];
}

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController
{
    return index;
}
  1. Metoda narzędzia, która zwraca kontroler widoku za pomocą indeksu, jeśli indeks jest poza zakresem, zwraca zero.
- (UIViewController *)childViewControllerAtIndex:(NSInteger)index
{
    if (index <= ([viewControllers count] - 1)) {
        return [viewControllers objectAtIndex:index];
    } else {
        return nil;
    }
}

Prosty sposób tworzenia poziomych kontrolerów widoku strony (strony nieskończone)

  1. Stwórzmy nowy projekt, wybieram aplikację Single View dla lepszej demonstracji

wprowadź opis zdjęcia tutaj

  1. Przeciągnij kontroler widoku strony do serii ujęć, po czym należy zmienić dwie rzeczy:
    1. Ustaw kontroler widoku strony jako kontroler widoku początkowego
    2. Zmień styl przejścia na przewijany

wprowadź opis zdjęcia tutaj

  1. I musisz utworzyć klasę UIPageViewController, a następnie ustawić ją jako niestandardową klasę kontrolera widoku strony w serii ujęć

  2. Wklej ten kod do swojej klasy UIPageViewController, powinieneś otrzymać kolorową nieskończoną aplikację stronicowaną :)

    class PageViewController: UIPageViewController, UIPageViewControllerDataSource {
    
        override func viewDidLoad() {
            self.dataSource = self
            let controller = createViewController()
            self.setViewControllers([controller], direction: .forward, animated: false, completion: nil)
        }
    
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
            let controller = createViewController()
            return controller
        }
    
        func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
            let controller = createViewController()
            return controller
        }
    
        func createViewController() -> UIViewController {
            var randomColor: UIColor {
                return UIColor(hue: CGFloat(arc4random_uniform(360))/360, saturation: 0.5, brightness: 0.8, alpha: 1)
            }
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let controller = storyboard.instantiateViewController(withIdentifier: "View Controller")
            controller.view.backgroundColor = randomColor
            return controller
        }
    }
    

Tak wygląda końcowy projekt, przy każdym przewijaniu otrzymujesz kontroler widoku w innym kolorze:

wprowadź opis zdjęcia tutaj



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow