「連絡先を追加」ボタンがあり、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;
}