2010-12-08 1 views
5

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

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

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

+0

owhh..thank ... Я никогда не понимаю, это раньше :) – 2010-12-08 06:06:14

ответ

8

Установить направление для помощи пирог:

[yourPopover setPopoverArrowDirection: UIPopoverArrowDirectionDown]; 

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

+0

Я знаю об этом направлении, но я имею в виду, я хочу, чтобы изменить положение направления .. Я использую UIPopoverArrowDirectionUp, но я хочу, чтобы положение стрелки находилось в X = 50 и y = 100, могу ли я это сделать? – 2010-12-08 06:05:45

+0

Я действительно одержим этим несколько месяцев назад ... К сожалению, вы не можете указать положение стрелки, только прямоугольник, который представляет uiipopover. – 2010-12-08 06:06:37

0

Если вы используете метод IBAction, вы можете использовать его (id)sender. (т. е. вызывающей кнопки). Затем вы можете установить прямоугольник вложения popover в рамку кнопки. Стрела приложит все усилия, чтобы прикрепить ее вдоль боковой рамки в соответствующем месте. См. 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 вручную при необходимости. Уменьшение ширины/высоты прямоугольника позволит вам более точно контролировать положение стрелки.

12

Я использую метод 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) 
} 
0

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