Skip to content

modalViewが閉じることを親ビューに伝える

2011年7月7日

メソッドを書こうと思ったんだけど、うまくいかなかった。
調べてみるとどうやらDelegateを使うべきーみたいに書いてあったからやってみた。

まず、モーダルで出すViewに以下のように書き換える

openview.h

@protocol modalViewDelegate <NSObject>
-(void) modalViewWillClose;
@end

@interface openview : UIViewController {
	id delegate;
}

@property (nonatomic,retain) id delegate;
@end

openview.m

#import "openview.h"

@implementation openview
@synthesize delegate;

- (void)dealloc
{
    [super dealloc];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIButton * button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(0, 0, 50, 50);
    [button addTarget:self action:@selector(push) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
}

- (void) push{
    NSLog(@"push!");
    [delegate modalViewWillClose];
}

んで、モーダルを呼び出す方は以下のようにする

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIButton * button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(0, 0, 50, 50);
    [button addTarget:self action:@selector(push) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
}

- (void) push{
    NSLog(@"push!");
    openview *view = [[openview alloc] init];
    view.delegate = self;
    [self presentModalViewController:view animated:YES];
    [view release];
}

-(void) modalViewWillClose{
    NSLog(@"close");
    [self dismissModalViewControllerAnimated:YES];
}

モーダルでボタンが押されたときに、「modalViewWillClose」を実行することで、親ビューの「- (void) modalViewWillClose」が呼び出されてくる、というわけです。

デリゲートメソッドを作るときに、通常のメソッドを作るように、「- (void) modalViewWillClose:(NSString *)string」みたいにすれば、一緒に他のデータも送れるみたいです。

広告

From → iPhone開発

コメントする

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中

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