Skip to content

配置したUIViewがどのUIViewControllerに貼られているのか確認する方法

2013年7月6日

シチュエーション:

UIViewのサブクラス内でボタンを作って、そのボタンアクション内で、このViewはどのUIViewContollerに配置されているのかを得たかった。

コード:

if ([v.nextResponder isKindOfClass:[UIViewController class]]) 
        return (UIViewController *)v.nextResponder;
    else
        return nil;

こうすることで、そいつの配置ViewControllerを取得することができる。

ちなみに、UIViewController.Viewに貼りつけた場合は以下な感じでUINavigationControllerを吸い上げることができる

- (UINavigationController *)navController{
    UIView *v = (UIView *)self.nextResponder;
    
    if ([v.nextResponder isKindOfClass:[UINavigationController class]]) 
        return (UINavigationController *)v.nextResponder;
    else
        return nil;    
}

navigationController.viewに貼り付けると、nextResponderとして、レイアウトビューが返ってきちゃいます。
それに対してもう一度nextResponderを叩くとそれが配置されているUINavigationControllerが帰ってきます。

こいつが返ってきちゃえばもうどうにでもできちゃう。
とりあえず今表示中のViewControllerを取得するのなら、

    UINavigationController *nav = [self navController];
    
    NSArray *viewControllers = nav.viewControllers;
    
    NSLog(@"%@",[viewControllers lastObject]);

てやってあげれば取れちゃう。
そこからはもう煮るなり焼くなりやってあげちゃえばOK。

参考:

http://stackoverflow.com/questions/1340434/get-to-uiviewcontroller-from-uiview-on-iphone

広告

From → iPhone開発

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。