Создание UIPopoverController - PullRequest
       35

Создание UIPopoverController

4 голосов
/ 17 марта 2012

Я создаю поповер в Xcode 4.3.Я не получаю никаких сообщений об ошибках, но когда я нажимаю кнопку «Создать и запустить» и нажимаю кнопку, которая должна открыть всплывающий экран, приложение вылетает и выделяет зеленую строку в моем коде и говорит:

Поток 1: точка останова 2.1 ..

Что это значит и как я могу это исправить?

- (IBAction)popOver
{
    SecondView *secondview = [[SecondView alloc] init];
    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:secondview];    

    [popover setDelegate:self];    

    [popover presentPopoverFromRect:CGRectMake(801, 401, 300, 200) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
    [popover setPopoverContentSize:CGSizeMake(300, 200)];   
}

Заранее спасибо.

Ответы [ 5 ]

16 голосов
/ 17 марта 2012

Несколько предложений здесь ...

Во-первых, вы используете автоматический подсчет ссылок (ARC)? если да, вам нужна переменная экземпляра для управления вашим UIPopoverController. Например:

@property (strong, nonatomic) UIPopoverController* popover;

, если вы не используете ARC, создайте retain:

@property (retain, nonatomic) UIPopoverController* popover;

В первом случае вы должны сделать это, потому что в противном случае ARC выпустит для вас только что созданный popover в конце вашего IBAction. Кроме того, вы делаете это, чтобы иметь ссылку на ваш поповер. Смотрите примечание. Это также верно, если вы не используете ARC.

ПРИМЕЧАНИЕ В какой-то момент у вас может возникнуть необходимость выпустить поповер. Например, в - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController do

self.popover = nil;

Тогда, если ваш SecondView - это UIViewController, назовите его SecondViewController. Но это простое предложение по именованию.

Наконец, правильный способ отображения всплывающего окна от отправителя действия (например, UIButton) вместо позиций жесткого кода может быть:

- (IBAction)openPopover:(id)sender
{
    // create the popover here...

    UIButton* senderButton = (UIButton*)sender;

    [popover setPopoverContentSize:CGSizeMake(300, 200)];
    [popover presentPopoverFromRect:senderButton.bounds inView:senderButton permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}
4 голосов
/ 30 ноября 2012
-(IBAction)showpop:(id)sender
{
UIPopoverController *pop = [[UIPopoverController alloc]initWithContentViewController:popoverview];
[pop setDelegate:self];
[pop presentPopoverFromRect:popbutton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

}
3 голосов
/ 11 октября 2012

SecondView, который вы передаете в UIPopOverController, это UIView.Сделайте это UIViewController, потому что UIPopOverController ожидает UIViewController.

-Suraj

2 голосов
/ 27 ноября 2012

Убедитесь, что вы симулируете на устройстве iPad

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
   // We are using an iPhone
    UIActionSheet *alertSheet = [[UIActionSheet alloc] initWithTitle:@"Where do you want to get your daily image?" delegate:(self) cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Camera", @"Library", nil];
   [alertSheet setTag:0];
   [alertSheet setDelegate:self];
   [alertSheet showFromTabBar:[[self tabBarController] tabBar]];
   [alertSheet release];
}else {
    // We are using an iPad
    /// here you should pass UIViewController inside the popover
    /// follow @flexaddicted notes to implement the popover
}
0 голосов
/ 18 ноября 2015

Проверьте ссылку ниже для учебника popover в ios

Учебник UIPopOverController

...