簡體   English   中英

使用ABNewPersonViewController時關閉UIPopoverController

[英]Dismissing UIPopoverController when using ABNewPersonViewController

我有一個“添加聯系人”按鈕,當在iPhone上時,該按鈕以模態形式顯示帶有ABNewPersonController的根視圖控制器的導航控制器。

如果在iPad上,我有一個彈出窗口,可以在其中顯示新的person控制器-很好。

嘗試解雇時出現問題。

我可以在觸摸完成時關閉彈出窗口,或者在我的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的委托已正確實現。 (?)

我猜想我可能會因為擁有多個控制器而使我的問題困惑,而我的popover委托方法被隱藏了嗎?

提前致謝

編輯-委托方法

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

從文檔:

彈出窗口內的水龍頭不會自動導致彈出窗口被關閉。 您的視圖和視圖控制器代碼必須顯式處理彈出框內的動作和事件,並根據需要調用dismissPopoverAnimated:方法。

您應該使用–popoverControllerShouldDismissPopover:委托方法–popoverControllerShouldDismissPopover:監聽即將被關閉的時間並在那里進行保存等。

另外,您應該使用self而不是this

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM