iOS
UIPageViewController
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
- UIPageViewControllerTransitionStyle
- UIPageViewControllerNavigationOrientation
- UIPageViewControllerSpineLocation
- UIPageViewControllerNavigationDirection
Uwagi
Referencje dla programistów Apple tutaj
Utwórz programowo stronicowanie poziome UIPageViewController
- 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];
- Utwórz instancję UIPageViewController.
UIPageViewController *pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
options:nil];
- Źródło danych to bieżąca klasa, która musi implementować protokół
UIPageViewControllerDataSource
.
pageViewController.dataSource = self;
-
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];
}
- Dodaj UIPageViewController jako kontroler widoku dziecko tak otrzyma od jego rodzic widok kontroler
appearance
irotation
wydarzeń.
[self addChildViewController:pageViewController];
pageViewController.view.frame = self.view.frame;
[self.view addSubview:pageViewController.view];
[pageViewController didMoveToParentViewController:self];
- 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;
}
- 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)
- Stwórzmy nowy projekt, wybieram aplikację Single View dla lepszej demonstracji
- Przeciągnij kontroler widoku strony do serii ujęć, po czym należy zmienić dwie rzeczy:
- Ustaw kontroler widoku strony jako kontroler widoku początkowego
- Zmień styl przejścia na przewijany
I musisz utworzyć klasę UIPageViewController, a następnie ustawić ją jako niestandardową klasę kontrolera widoku strony w serii ujęć
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: