2011-05-06 91 views
5

是否可以在屏幕上顯示UIPopover控制器?
我在我的應用程序中可以稍微移動一個小視圖,我希望UIPopoverController可以隨它移動,而不必在每次移動時重新呈現UIPopoverController。這可能嗎?UIPopoverController可以在屏幕上移動嗎?

+0

是不是'[酥料餅presentPopoverFromRect:]'爲你工作? – 2011-05-06 21:54:58

+0

現在的問題是,他是否可以移動popOver一旦提交 – Sid 2011-05-06 23:23:34

+0

我不認爲它的位置可以直接更改。但是,如果您在不打開它的情況下調用presentPopoverFromRect,它應該「移動」。 – Anna 2011-05-07 00:46:15

回答

1

從iOS 9開始,「UIPopoverController已過時,現在將Popovers實現爲UIViewController演示文稿,使用UIModalPresentationPopover和UIPopoverPresentationController的模態演示風格。

使用以下內容顯示彈出窗口。您可能能夠更改sourceRect和sourceView的值,但這不是API行爲。

DetailViewController *detailVC = self.detailViewController; 
    detailVC.preferredContentSize = CGSizeMake(420, 92); 
    detailVC.modalPresentationStyle = UIModalPresentationPopover; 


    UIPopoverPresentationController *presController = detailVC.popoverPresentationController; 
    if (presController) { 
     presController.delegate = detailVC; 
     presController.barButtonItem = self.detailButton; 
     presController.sourceRect = self.view.frame; 
     presController.sourceView = self.view; 
     presController.permittedArrowDirections = UIPopoverArrowDirectionAny; 
    } 

    [self presentViewController: detailVC animated:YES completion:^{ 

    }]; 

取而代之的是,我建議保留對popover的視圖控制器的引用,關閉popover並重新呈現。

DetailViewController *detailVC = self.detailViewController; 
[self dismissViewControllerAnimated:NO completion:^{ 

    UIPopoverPresentationController *presController = detailVC.popoverPresentationController; 
    if (presController) { 
     presController.delegate = detailVC; 
     presController.barButtonItem = self.detailButton; 
     presController.sourceRect = self.view.frame; //Update frame 
     presController.sourceView = self.view; 
     presController.permittedArrowDirections = UIPopoverArrowDirectionAny; 
    } 

    [self presentViewController: detailVC animated:NO completion:^{ 

    }]; 
}]; 
+0

我一直在爲此投票。如果您打算爲接受的答案投票,請提供幫助並發表評論。 – 2013-07-19 17:12:16

+0

「創建你自己的」不是我要找的答案 – Loukas 2016-03-18 14:06:17

+0

@Loukas我希望你會更喜歡這個新的答案。如果UIPopoverPresentationController沒有提供所需的功能,您將不得不重新創建UIPopoverController,因爲API不是很靈活。 – 2016-03-19 13:42:43

0

不,你不能。這不是做這件事的方法。

pover presentPopoverFromRect: 

在評論中提到,但注意到

目前

你不能沒有重繪代表。

+0

Pease請參閱iPad上的Paper by Fifty。他們有一個包含文本字段的彈出窗口。在鍵盤上方彈出動畫,當鍵盤被解除時,動畫回到原始位置。內置或開發人員是否支持? – Daniel 2012-10-03 03:55:40

+0

當出現鍵盤時,默認情況下SDK會將彈出窗口移動到更高位置以容納鍵盤。一旦鍵盤被解散,彈出窗口就會回到原來的位置。這都是建立在行爲上的。 – Andrew 2013-07-19 16:39:48

+0

是的,這是正確的。我忘了我的觀點是什麼,現在太早了。 – Daniel 2013-07-19 17:47:47

0

您可以跟蹤用戶在屏幕上的觸摸情況,並使用presentPopoverFromRect:來重新顯示彈出窗口。

+0

這是值得一試的,但我想這樣做可能有點貴。我相信,當你解僱它並重新實現它時,正在進行的資源分配很多,這可能會對系統造成嚴重的負擔。 – 2011-05-07 01:35:48

+0

這是事實,但那是一個良好的內存管理進場的地方。特別是在iPad上,你有更多的記憶可供玩耍。 – WrightsCS 2011-05-07 01:41:30

相關問題