Установите направление и положение стрелки UIPopover вручную - PullRequest
8 голосов
/ 08 декабря 2010

Я использую UIBarButtonItem.В моем сценарии я хочу показать поповер из каждой кнопки панели, когда я дважды щелкаю эту кнопку панели.Поэтому я использую UITapGesture из этого UIBarButtonItem.Но стрелка всплывающего окна всегда появляется в середине всех UIBarButtonItem.

Я не могу заставить стрелку появляться в середине каждой кнопки панели.Мой друг говорил мне установить направление стрелки, используя точку, но я не знаю, как это сделать.

Как я могу установить положение и направление стрелки поповера?

Ответы [ 4 ]

14 голосов
/ 02 августа 2016

Я использую метод mittedArrowDirections = .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)
}
10 голосов
/ 08 декабря 2010

Установите направление для всплывающего окна, используя:

[yourPopover setPopoverArrowDirection: UIPopoverArrowDirectionDown];

Вы также можете использовать UIPopoverArrowDirectionUp, UIPopoverArrowDirectionLeft, UIPopoverArrowDirectionRight и UIPopoverArrowDirectionAny.

Для Swift.

    yourPopover?.permittedArrowDirections = .up or .down or .left or .right
0 голосов
/ 05 марта 2018

Вы можете установить направление стрелки в инспекторе атрибутов Storyboard Segue. Например, я установил направление стрелки вниз только на следующем снимке экрана: enter image description here

0 голосов
/ 29 марта 2013

Если вы используете метод IBAction, вы можете использовать (id)sender в качестве его параметра. (то есть вызывающая кнопка) Затем вы можете установить прямоугольник прикрепления поповера к рамке кнопки. Стрелка приложит все усилия, чтобы прикрепить ее вдоль стороны этого кадра в соответствующем месте См. Справочник по классам UIPopoverController .

-(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 вручную. Уменьшение ширины / высоты прямоугольника позволит вам более жестко контролировать положение стрелки.

...