Несколько предложений здесь ...
Во-первых, вы используете автоматический подсчет ссылок (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];
}