我有UIPopoverController
使用此方法显示UIViewController
:
[self.popover presentPopoverFromBarButtonItem:self.infoBarButtonItem
permittedArrowDirections:UIPopoverArrowDirectionUp
animated:YES];
self.popover
是我的UIPopoverController
。
代码效果很好,但是Popover箭头位于BarButtonItem
的中间,如何在"下显示带有箭头"的弹出框。按钮?
目前的情况如下:
答案 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;
}
}