iOS从条形图按钮项目底部显示弹出窗口

时间:2014-06-17 10:49:50

标签: ios objective-c uipopovercontroller uibarbuttonitem uipopover

我有UIPopoverController使用此方法显示UIViewController

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

self.popover是我的UIPopoverController

代码效果很好,但是Popover箭头位于BarButtonItem的中间,如何在"下显示带有箭头"的弹出框。按钮?

目前的情况如下:
altText

6 个答案:

答案 0 :(得分: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)

答案 1 :(得分:6)

这个怎么样

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];



}

答案 2 :(得分:0)

我的建议是使用方法:

presentPopoverFromRect:inView:permittedArrowDirections:animated:

并为其提供适当的CGRect,以使UIPopoverController出现在您想要的位置。

然后,您可以准确指定您希望弹出窗口的位置和指向的位置。这不是一个理想的情况,但是当它给弹出控制器UIBarButtonItem时,你没有说它应该如何使用它来定位自己。

答案 3 :(得分:0)

在信息按钮的选择器方法中尝试:

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

希望这能帮到你!

答案 4 :(得分:0)

对于UIViewController使用PopoverPresentationController(iOS 9+)的所有人; 这对我有用: 你可以直接设置你的UIBarButtonItem

myPopoverPresentationController?.barButtonItem = myUIBarButtonItem

答案 5 :(得分:0)

可以使用此代码完成。

在Swift中

 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;
    }
 }