2012-12-14 17 views

Odpowiedz

0

jeśli jesteś w każdej klasie UIView (jako UIButton, sowne lub innej podklasy), który jest podrzędny w UIViewController.view (lub jakiegokolwiek subView.subView.subView ... z nim)

ci można sprawdzić, czy istnieje UIViewController w superVew (ów) łańcucha, i przestać kiedy znajdziesz UIViewController

coś takiego:

UIViewController* controllerFound = nil; 
for (UIView* next = [self superview]; next; next = next.superview) { 
    UIResponder* nextResponder = [next nextResponder]; 
    if ([nextResponder isKindOfClass:[UIViewController class]]) { 
     controllerFound = (UIViewController*)nextResponder; 
    } 
} 
+0

Nie wiem tego, ponieważ nie użyłem tej metody. muszę się dowiedzieć w sterowniku widoku strony, czy możesz opublikować coś związanego z tym. –

22

prostu miałem ten sam problem. Wygląda na to, że bieżący kontroler jest ostatni na liście po zmianie strony. To działało dla mnie, ale nie wiem, czy to zawsze prawda.

- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed 
{ 
    UIViewController *vc = [pageViewController.viewControllers lastObject]; 
} 
+0

dzięki, spróbuję. –

+0

To jest poprawna odpowiedź. Dzięki @CodeStage – Futur

+3

nie działa !!! – mnl

1

Spróbuj dostać pierwszego kontrolera widoku w pageViewController.viewControllers

if let vc = pageViewController.viewControllers?[0] { 
     ... vc is current controller... 
    } 

Jeśli chcesz obsługiwać zmiany stron, zrób to w sposób Delegat:

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) { 
    if let vc = pageViewController.viewControllers?[0] { 
     ... vc is current controller... 
    } 
} 
Powiązane problemy