2012-03-17 5 views
4

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

Резьба 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)]; 
} 

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

ответ

16

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

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

@property (strong, nonatomic) UIPopoverController* popover; 

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

@property (retain, nonatomic) UIPopoverController* popover; 

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

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

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]; 
} 
3

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

-Suraj

2

Убедитесь, что вы имитировать на 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 
} 
4
-(IBAction)showpop:(id)sender 
{ 
UIPopoverController *pop = [[UIPopoverController alloc]initWithContentViewController:popoverview]; 
[pop setDelegate:self]; 
[pop presentPopoverFromRect:popbutton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

} 
0

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

UIPopOverController Tutorial

+0

вы можете также добавить некоторую суть ссылка в ответе –

+0

Исходный код также есть в репетиторе ial, но загружен в G диск не на gist :) –

Смежные вопросы