0

「連絡先を追加」ボタンがあり、iPhone でナビゲーション コントローラーを ABNewPersonController のルート ビュー コントローラーにモーダルに表示します。

iPad の場合、内部に新しい人物コントローラーを表示できるポップオーバーがあります。

問題は、却下しようとしたときに発生します。

didCompleteWithNewPerson を使用して実装内で完了またはキャンセルをタッチすると、ポップオーバーを閉じることができます。

if(self.popoverController != nil)
    [popoverController dismissPopoverAnimated:YES];  

ただし、ポップオーバーの外側に触れても、これは無視されません。

popoverControllerShouldDismissPopover メソッドに対して YES を返し、ポップオーバーのデリゲートを に設定しましたthis。このメソッド内に NSLOG を配置しましたが、そこにドロップしません。何か不足していますか?

外に触れたときにポップオーバーを閉じる方法を知っている人はいますか?

更新 - その他のコード

-(IBAction)contactsClicked:(id) sender{

    ABNewPersonViewController *newPersonView = [[ABNewPersonViewController alloc] init];
    [newPersonView setNewPersonViewDelegate:self];
    [newPersonView setDisplayedPerson:newPerson];

        UINavigationController *addContactNavController = [[UINavigationController alloc] initWithRootViewController:newPersonView];
        [newPersonView release];


        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

            if(self.popoverController == nil){
                UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:addContactNavController];

                self.popoverController = popover;
                self.popoverController.delegate = self;
                [popover release];
            }
            CGRect frame = [sender frame];
            [popoverController presentPopoverFromRect:frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES];
        } else {
            [self presentModalViewController:addContactNavController animated:YES];
            [addContactNavController release];
        }
    }
-(void)unknownPersonViewController:(ABUnknownPersonViewController *)unknownPersonView didResolveToPerson:(ABRecordRef)person{
    [self dismissModalViewControllerAnimated:YES];
}
-(void)newPersonViewController:(ABNewPersonViewController *)newPersonViewController didCompleteWithNewPerson:(ABRecordRef)person {
    NSLog(@"DONE OR CANCEL clicked!!!!"); //prints
    if (self.popoverController != nil) {
        [popoverController dismissPopoverAnimated:YES];
    }
    [self dismissModalViewControllerAnimated:YES];
}

新しい人物コントローラーの [完了] ボタンと [キャンセル] ボタンが機能し、コントローラーとポップオーバーを閉じます (iPad で実行している場合)。これは、ABNewPersonViewController のデリゲートが正しく実装されていることを意味していると思います。(?)

複数のコントローラーがあり、ポップオーバーデリゲートメソッドが非表示になっているなどの問題を混乱させている可能性があると思いますか?

前もって感謝します

EDIT - デリゲートメソッド

-(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)thePopoverController{
    NSLog(@"clicked outside the popover");//never prints
    return YES;
    }
4

1 に答える 1

0

ドキュメントから:

ポップオーバー ウィンドウ内をタップしても、ポップオーバーが自動的に閉じられるわけではありません。ビューとビュー コントローラーのコードは、ポップオーバー内のアクションとイベントを明示的に処理し、必要に応じて、dismissPopoverAnimated: メソッドを呼び出す必要があります。

ポップオーバー デリゲート メソッド–popoverControllerShouldDismissPopover:を使用して、いつ閉じられるかをリッスンし、そこで保存などを行う必要があります。

また、selfnotを使用する必要がありますthis

于 2010-09-30T11:34:55.160 に答える