0

我已閱讀UIPopoverController docs以及更多10個stackoverflow解決方案,這些解決方案在iOS 8.0.2 ipad設備中都不起作用。iOS 8 UIActivityViewController和/或UIPopoverController在點擊它們之外時不會消失

目標:

我想提出點擊它外面dissmisses當共享視圖。

問題:

該代碼在iOS 8.0下工作正常。

密碼(試了很多版本...):

NSArray *dataToShare = @[url]; // ...or whatever pieces of data you want to share. 
      UIActivityViewController* activityViewController = 
      [[UIActivityViewController alloc] initWithActivityItems:dataToShare 
               applicationActivities:nil]; 
      activityViewController.modalInPopover = YES; 


      self.act = [[UIPopoverController alloc] initWithContentViewController:activityViewController]; 
      [self.act presentPopoverFromRect:CGRectMake(self.view.bounds.size.width/2, self.view.bounds.size.height/2, self.view.bounds.size.width/2, self.view.bounds.size.width/2) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
      self.act.delegate = self; 

我已經添加了:

UIPopoverControllerDelegate

我曾嘗試:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

一旦該

UIPopoverController

被呈現在視圖損失集中和不登記觸摸。因此,我無法處理自我之外的觸動,以迫使他們失戀。

也...

NSArray *dataToShare = @[url]; // ...or whatever pieces of data you want to share. 
      UIActivityViewController* activityViewController = 
      [[UIActivityViewController alloc] initWithActivityItems:dataToShare 
               applicationActivities:nil]; 
      activityViewController.modalInPopover = YES; 

      UIPopoverPresentationController *presentationController = [activityViewController popoverPresentationController]; 
      presentationController.sourceView = self.view; // if button or change to self.view. 

      [self.parentViewController presentViewController:activityViewController animated:YES completion:nil]; 

,我試圖從沒有藏漢工作父呈現UIActivityViewController和UIPopoverController。

請幫忙,我失去了這個愚蠢的工作在iOS 7.1上,而不是在iOS 8+這是荒謬的,我仍然不知道爲什麼。

我會嘗試添加也在iOS8 +中消失的取消按鈕。

更新1:

添加一個UIButton內的UIBarButtonItem沒有幫助...

UIButton *control = (UIButton *) sender; 
       [control setFrame:CGRectMake(300, 300, 100, 100)]; 
       [control setBackgroundColor:[UIColor redColor]]; 
       UIBarButtonItem *barButtonItemView = [[UIBarButtonItem alloc] init]; 
       [barButtonItemView setCustomView:control]; 
       [self.popup presentPopoverFromBarButtonItem:barButtonItemView permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES]; 

更新2 - 2014年12月19日。 (iOS 7.1。 - 8.1.2):

接受的答案適用於iOS 8.1。我在iOS 7.1中遇到了一些錯誤。所以我修改它爲iOS 7.1工作。我已經在回答下面的評論中說明了代碼在哪些設備上工作。

// publish - sharing 
     NSArray *dataToShare = @[url]; // ...or whatever pieces of data you want to share. 
     UIActivityViewController* activityViewController = 
     [[UIActivityViewController alloc] initWithActivityItems:dataToShare 
              applicationActivities:nil]; 

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 
    { 
     NSLog(@" SHARING - 1 - "); 
     [self presentViewController:activityViewController animated:YES completion:^{}]; 
    } 
    else 
    { 
     // Change Rect to position Popover 
     NSLog(@" SHARING - 2 - "); 
     self.popup = [[UIPopoverController alloc] initWithContentViewController:activityViewController]; 

     [self.popup presentPopoverFromRect:CGRectMake(self.view.frame.size.width * 3/5 , 
                 self.view.frame.size.width/2, 
                 self.view.frame.size.width/10, 
                 self.view.frame.size.width/10) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    } 

回答

1

如何添加此。

UIActivityViewController* activityViewController = 
      [[UIActivityViewController alloc] initWithActivityItems:dataToShare 
               applicationActivities:nil]; 
      activityViewController.modalInPopover = YES; 

activityViewController.popoverPresentationController.sourceView = self.view; 
+0

我在iOS 8.1.2(iPad)上測試了這段代碼,它仍然無法正常工作。在共享視圖外部單擊不會消除它。僅使用此代碼根本不起作用:( – 2014-12-18 10:17:34

+1

分享的觸發器是什麼?(例如推送共享按鈕) 我將顯示一部分代碼,該代碼在我的程序中工作 ' - (IBAction)shareButton :(ID)發送 { 的NSArray *項目= @你想分享的東西]; UIActivityViewController * activityViewController = [[UIActivityViewController頁頭] initWithActivityItems:項目applicationActivities:applicationActivities]; activityViewController.popoverPresentationController.sourceView = self.view ; [self presentViewController:activityViewController animated:YES completion:nil]; }' – ahiru 2014-12-19 12:28:31

+0

您評論過的代碼te是正確的,並且適用於iOS 8.1.2。 Ty m8 :)。我已經編輯過你的帖子,審覈後我會接受答案。問題出在「activityViewController.modalInPopover = YES;」代碼行。刪除它解決了這個問題。我添加了一些修改,以便代碼適用於iOS 7.1.0 - iOS 8.1.2。完整的修改將在問題的UPDATE代碼中可見。該代碼已經在(設備)上測試過:iPod和iPad 2(iOS 8.1.2)以及所有模擬器(iOS 7.1和8.1)。 – 2014-12-19 13:14:17