UIPopoverController を閉じる際に注意すること

dismissPopoverAnimated:メソッドをコールすると
– (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
がコールされない。

ポップオーバー コントロール作成時にポップオーバー コントロールのメンバ変数を参照し、alloc している場合は、必ず nil をセットしておく。
また、ポップオーバー コントロールへ release メッセージを送信し、解放しておかないとリークの原因になるので注意すること。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// ポップオーバー コントロールの表示処理
- (void)dispPopoverControll
{
    // ポップオーバー コントロールを表示する
    if (!popoverController_) {
    	// ポップオーバー コントロールを alloc する
    	:
    }
    if (!popoverController_.popoverVisible) {
		:
    }
}
 
#pragma mark -
#pragma mark UIPopoverControllerDelegate Method
 
// ポップオーバー コントロールがコントロール領域外をタップするなどして非表示とされた際の処理
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
    // the user dismissed the popover, so release it here
    [popoverController release];
    popoverController = nil;
 
    popoverController_ = nil;    
}
 
- (void)closePopoverController
{
    // 本ポップオーバーを非表示にする
    if (popoverController_.popoverVisible == YES) {
        [popoverController_ dismissPopoverAnimated:YES];
 
        [popoverController_ release];
        popoverController_ = nil;
    }
    :
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です