我正在使用UIBarButtonItem。在我的方案中,我想在双击每个条形按钮时显示一个弹出式窗口。因此,我从该UIBarButtonItem使用UITapGesture。但是,弹出箭头始终出现在所有UIBarButtonItem的中间。
我无法使箭头出现在每个条形按钮的中间。我的朋友告诉我使用点设置箭头方向,但是我不知道该怎么做。
如何设置弹出箭头的位置和方向?
使用以下方法设置弹出框的方向:
[yourPopover setPopoverArrowDirection: UIPopoverArrowDirectionDown];
您也可以使用UIPopoverArrowDirectionUp
,UIPopoverArrowDirectionLeft
,UIPopoverArrowDirectionRight
和UIPopoverArrowDirectionAny
。
对于Swift
yourPopover?.permittedArrowDirections = .up // or .down, .left, .right
我使用方法permittedArrowDirections = .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)
}
如果使用的是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进行硬编码。缩小矩形的宽度/高度将使您可以更紧密地控制箭头的位置。