手动设置UIPopover箭头方向和位置

时间:2010-12-08 05:09:54

标签: ios objective-c uipopovercontroller uibarbuttonitem

我正在使用UIBarButtonItem。在我的场景中,我想在双击该栏按钮时显示每个栏按钮的弹出窗口。所以我使用UIBarButtonItem中的UITapGesture。但是,弹出箭头始终出现在所有UIBarButtonItem的中间。

我不能让箭头出现在每个小节按钮的中间。我的朋友告诉我用点设置箭头方向,但我不知道该怎么做。

如何设置弹出箭头的位置和方向?

4 个答案:

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

您还可以使用UIPopoverArrowDirectionUpUIPopoverArrowDirectionLeftUIPopoverArrowDirectionRightUIPopoverArrowDirectionAny

对于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)

您可以在Storyboard Segue的属性检查器中设置箭头的方向。例如,我仅在以下屏幕截图中将箭头方向设置为向下: enter image description here