我正在使用UIBarButtonItem。在我的场景中,我想在双击该栏按钮时显示每个栏按钮的弹出窗口。所以我使用UIBarButtonItem中的UITapGesture。但是,弹出箭头始终出现在所有UIBarButtonItem的中间。
我不能让箭头出现在每个小节按钮的中间。我的朋友告诉我用点设置箭头方向,但我不知道该怎么做。
如何设置弹出箭头的位置和方向?
答案 0 :(得分:14)
我使用方法 allowedArrowDirections = .Down ,它对我起作用。 Swift示例:
if let popoverPresentationController = shareViewController.popoverPresentationController {
popoverPresentationController.permittedArrowDirections = .Down
popoverPresentationController.delegate = self
popoverPresentationController.sourceView = sender as! UIButton
popoverPresentationController.sourceRect = CGRectMake(0, 0, sender.frame.size.width, sender.frame.size.height)
}
答案 1 :(得分:10)
使用以下方法设置弹出窗口的方向:
[yourPopover setPopoverArrowDirection: UIPopoverArrowDirectionDown];
您还可以使用UIPopoverArrowDirectionUp
,UIPopoverArrowDirectionLeft
,UIPopoverArrowDirectionRight
和UIPopoverArrowDirectionAny
。
对于Swift
yourPopover?.permittedArrowDirections = .up or .down or .left or .right
答案 2 :(得分:0)
如果您使用的是IBAction方法,则可以使用(id)sender
作为参数。 (即调用按钮)然后您可以将弹出框的附件矩形设置为按钮的框架。箭头将尽力沿着此框架的一侧贴在适当的位置。请参阅UIPopoverController Class Reference。
-(IBAction)sortButtonPressed:(id)sender {
// Set up your popover class, this varies per your implementation
MyPopoverClass *iPop = [[MyPopoverClass alloc] initWithNibName:@"MyPopover" bundle:nil];
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:iPop];
// Grab the button info from the input parameter
UIButton *button = (UIButton *)sender;
CGRect buttonRectangle = button.frame;
// Set the arrow direction
UIPopoverDirection dir = UIPopoverArrowDirectionAny; // Or Up, Down, etc.
// Put it all together
[popover presentPopoverFromRect:buttonRectangle inView:mySubView permittedArrowDirections:dir animated:YES];
[popover release]
[iPop release];
}
如有必要,您也可以手动硬编码CGRect。缩小矩形的宽度/高度可以让您更严格地控制箭头的位置。
答案 3 :(得分:0)