2012-12-14 9 views
6

現在、ページビューコントローラで現在のビューコントローラを取得したいとします。どのようにそれを行うことができます。それには何人かの代理人が電話をかけていますか?ページビューコントローラで現在のビューコントローラを取得する方法

+0

たぶん、この缶ヘルプ http://stackoverflow.com/questions/8400870/uipageviewcontroller-return-the-current-visible-view – Mert

答えて

0

おUIViewController.view(またはそのいずれかのsubView.subView.subView ...の)のサブビューである(UIButton、uitableのか、他のサブクラスとして)任意のUIViewクラスである場合は

君は私は同じ問題を抱えていた

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

私はこの方法を使用していないので、私はこれを知らない。私はページビューのコントローラであなたがそれに関連する何かを投稿することができますを見つける必要があります。 –

22

:のUIViewControllerはsuperVew(S)チェーンにありますかどうかをチェックし、あなたがこのようなのUIViewController

何かを見つけたときに停止することができます。ページを変更した後、現在のコントローラがリストの最後に表示されているように見えます。これは私のために働いたが、それはいつも真実かどうかわからない。

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

私はそれを試していただきありがとうございます。 –

+0

それは正しい答えです。ありがとう@コードステージ – Futur

+3

は動作しません! – mnl

1

ページの変更を処理したい場合は、デリゲートメソッドでそれを行うpageViewController.viewControllers

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

の最初のビューコントローラを取得してみてください。

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