2011-06-13 48 views
15

時,不要關閉UIPopoverController,但我無法找到某個似乎對許多人有用的東西的答案。經過一番搜索後,點擊關閉

當用戶在外面的某個地方點擊時,有沒有辦法讓UIPopoverController不是解僱?我希望用戶必須使用取消按鈕(是的,我意識到這可能違反了蘋果的HIG,但這是一種罕見的情況,從用戶體驗的角度來看是有意義的)。

感謝您的任何幫助。

+2

「我意識到這***可能***違反了蘋果的HIG ......」你讀過了嗎? – 2011-06-13 15:54:20

+0

我已經閱讀了好幾遍,但它對於設計(從另一個應用程序打開文件以保存)也非常有意義,並且也看到了很多應用程序。 :/ – 2011-06-13 15:56:25

回答

20

您可以對點擊發生的位置以及彈出窗口的代表返回NO進行點擊測試。 - (BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController

+1

+1:這是完美的。必須在文檔中瀏覽它。謝謝。當你打電話給dismissPopoverAnimated時,它也不會被調用:所以甚至不必真的進行測試。謝謝 – 2011-06-13 15:58:06

+1

注意:這種委託方法(實際上'UIPopoverControllerDelegate'的所有方法)已被棄用:https://developer.apple.com/documentation/uikit/uipopovercontrollerdelegate/1624661-popovercontrollershoulddismisspo?language = bjc。 – ajbmdi 2018-03-09 14:53:17

25

只需在UIPopoverController中顯示的UIViewController上設置modalInPopover屬性即可。

popover = [[UIPopoverController alloc] initWithContentViewController:content]; 
content.modalInPopover = YES; 
[popover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

注意,as of iOS5,你必須設置modalInPopover-viewDidAppear內。

1

所以,我意識到這是一個老問題。不過,對於今天任何尋找解決方案的人來說,都有一個更簡單的答案

如果使用Storyboard Segue,則可以在segue上設置passthrough屬性,以允許與視圖中的其他對象進行交互。如果這樣做,單擊彈出框邊界之外的按鈕將不會關閉彈出窗口。

這裏有更多的一些信息: What are Anchor and Passthrough used for in popover segues?

下面是來自蘋果文檔一個摘錄:

要允許用戶使用指定的意見交流,而不是解僱 的酥料餅,你可以分配對passthroughViews 屬性的一個或多個視圖。