Skip to content

UINavigationControllerのViewに貼ったViewに、今表示しているViewControllerからアクセスする

2013年7月9日

前回の「どのViewControllerに貼られているか?」の続きみたいなもんです。
これをするために前回のをやりました。

シチュエーション

画面遷移してもずっと存在し続けるメニューを作りたいなー。
でもタブとかじゃなくってViewの上に乗っかってて、邪魔なときは非表示にしたりアニメーションを自由にしたい。

コード

※ShareViewというのは、NavigationControllerのViewに貼り付けるために作ったクラスです。別になんでも構わないと思うけど、UIViewだと判別しにくくなると思います。

Viewの貼り付け

- (void)addShareView{
    
    // ShareViewが作られていないときに限って作成しAddする
    if ([self findShareView] == nil) {
        
        CGRect navRect = self.navigationController.view.frame;
        
        float height = SHAREVIEW_HEIGHT;
        
        ShareView *shareView = [[ShareView alloc] initWithFrame:CGRectMake(0, navRect.size.height - height, 320, height)];
        
        [self.navigationController.view addSubview:shareView];
    }
}

Viewの取得

- (ShareView *)findShareView{
    
    NSArray *views = self.navigationController.view.subviews;
    
    ShareView *sView = nil;
    
    for (UIView *view in views) {
        if ([view isKindOfClass:[ShareView class]]) {
            sView = (ShareView *)view;
            return sView;
        }
    }
    // なかったらnilを返す
    return nil;

}

Viewの表示

- (void)showShareView{
    
    ShareView *sView = [self findShareView];
    [sView hide:NO animated:YES];// ここはお好きな表示方法を
    
}

Viewの非表示

- (void)hideShareView{
    
    ShareView *sView = [self findShareView];
    [sView hide:YES animated:YES];// ここはお好きな非表示方法を

}

こんなかんじ。

これらを実装したViewControllerを作成して、操作したいControllerで継承しちゃえば、継承したコントローラーでなら表示非表示を管理出来ます。
Viewに貼りつけたボタンなどから現在のViewControllerを取得するには、以前書いた記事のようにすれば取得できるので、これで交信できるようになります。

広告

From → iPhone開発

コメントする

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中

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