2

目前酥料餅我有一個UIPopoverController,使用這種方法提供了一個UIViewControlleriOS版欄按鈕項下

[self.popover presentPopoverFromBarButtonItem:self.infoBarButtonItem 
        permittedArrowDirections:UIPopoverArrowDirectionUp 
            animated:YES]; 

self.popover是我UIPopoverController

代碼運行良好,但Popover箭頭位於BarButtonItem的中間如何在按鈕下方顯示彈出窗口?

這是它目前的樣子:
altText

回答

5

這個怎麼樣

UIBarButtonItem *item = self.infoBarButtonItem ; 

UIView *view = [item valueForKey:@"view"]; 

if(view){ 

     CGRect frame=view.frame; 

     [self.popover presentPopoverFromRect:frame 
             inView:view.superview 
        permittedArrowDirections:UIPopoverArrowDirectionUp 
            animated:YES]; 



} 
+0

你將如何得到的UIBarButtonItem的框架? – GenieWanted

+0

@Genie萬事如意!代碼已更新! –

0

我的建議是使用方法:

presentPopoverFromRect:inView:permittedArrowDirections:animated: 

,並給它一個合適的CGRect使UIPopoverController出現在你想。

然後,您可以準確指定彈出窗口的起始位置和指向位置。這不是一個理想的情況,但是當它給popover控制器一個UIBarButtonItem時,你沒有發言權應該如何使用它來定位自己。

0

試試這個在信息按鈕的選擇方法:

[self.popover presentPopoverFromRect:[(UIButton *)sender frame] 
             inView:self.view 
         permittedArrowDirections:UIPopoverArrowDirectionUp 
             animated:YES]; 

希望這可以幫助你!

+0

它是'UIBarButtonItem',而不是'UIButton' – Iree

9

在iOS中9,你可以試試這個代碼:

let alert = UIAlertController(title: "title", message: "message", preferredStyle: UIAlertControllerStyle.ActionSheet) 
alert.modalPresentationStyle = UIModalPresentationStyle.Popover 
alert.popoverPresentationController?.barButtonItem = sender 
presentViewController(alert, animated: true, completion: nil) 
+0

嘿,歡迎來到Stack Overflow!不要忘記使用4格縮進來格式化您的代碼片段,使其看起來更好。 – Jolta

+0

沒問題。 @Jolta,謝謝你的提醒。 –

+0

什麼是提醒? ??? – SmallChess

0

對於所有誰使用UIViewControllerPopoverPresentationController(iOS版9+); 這對我有用: 你可以直接設置你的UIBarButtonItem這樣。

myPopoverPresentationController?.barButtonItem = myUIBarButtonItem 
0

它可以通過使用此代碼完成。

在斯威夫特

if UIDevice.current.userInterfaceIdiom == .pad { 
    let item = self.navigationItem.rightBarButtonItem; 
    let view = item?.value(forKey: "view") 
    let popPresenter = alert.popoverPresentationController 
    popPresenter?.sourceView = view 
    popPresenter?.sourceRect = view.bounds 
} 
present(alert, animated: true, completion: nil) 

在Objective-C

if([[UIDevice currentDevice]userInterfaceIdiom]== UIUserInterfaceIdiomPad) { 
    UIBarButtonItem *item = self.navigationItem.rightBarButtonItem; 
    UIView *view = [item valueForKey:@"view"]; 
    UIPopoverPresentationController *popover = alert.popoverPresentationController; 
    if(view){ 
     popover.sourceRect = view.frame; 
     popover.sourceView = view; 
    } 
}