Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS显示工具栏按钮项底部的Popover_Ios_Objective C_Uipopovercontroller_Uibarbuttonitem_Uipopover - Fatal编程技术网

iOS显示工具栏按钮项底部的Popover

iOS显示工具栏按钮项底部的Popover,ios,objective-c,uipopovercontroller,uibarbuttonitem,uipopover,Ios,Objective C,Uipopovercontroller,Uibarbuttonitem,Uipopover,我有一个UIPopoverController,它使用以下方法显示UIViewController: [self.popover presentPopoverFromBarButtonItem:self.infoBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; self

我有一个
UIPopoverController
,它使用以下方法显示
UIViewController

[self.popover presentPopoverFromBarButtonItem:self.infoBarButtonItem 
                     permittedArrowDirections:UIPopoverArrowDirectionUp
                                     animated:YES];
self.popover
是我的
UIPopopOvercontroller

<代码>工作正常,但Popover箭头在<代码> BButton项目中间>如何用箭头“按钮”下显示Popover?< /P> 这就是它当前的样子:

我的建议是使用以下方法:

presentPopoverFromRect:inView:permittedArrowDirections:animated:
并给它一个合适的CGRect,使
UIPopoverController
显示在您想要的地方

然后,您可以确切地指定希望popover起源和指向的位置。这不是一个理想的情况,但是当要给popover控制器一个
uibarbuttoneim
时,您无法决定它应该如何使用它来定位自身。

这怎么样

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



}

在“信息”按钮的选择器方法中尝试以下操作:

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

希望这对你有帮助

在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)

适用于所有使用
UIViewController
PopoverPresentationController
(iOS 9+)的用户; 这对我很有用: 您可以像这样直接设置您的
UIBarButtonItem

myPopoverPresentationController?.barButtonItem = myUIBarButtonItem

这可以通过使用此代码来完成

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

你如何得到一个UIBarbuttonite的框架?嘿,欢迎来到Stack Overflow!别忘了用4个空格的缩进格式化代码段,使其看起来更漂亮。@StudentDon’对不起,这是UIAlertController。答案已编辑。它是
UIBarButtonItem
,而不是
UIButton