Ваш код довольно странный.
Например, почему вы создаете представление и добавляете ли вы его в представление содержимого вашего поповера?
Затем вы должны обратить внимание наутечки памяти.В вашем коде их много.
Тем не менее, вот простой пример отображения UIViewcontroller
внутри UIPopoverController
.
- (IBAction)yourAction:(id)sender
UIButton* senderButton = (UIButton*)sender;
UIViewController* yourController = [[UIViewController alloc] init];
UIPopoverController* pop = [[UIPopoverController alloc] initWithContentViewController:yourController];
pop.delegate = self;
pop.popoverContentSize = CGSizeMake(300, 300);
self.popover = pop;
[pop presentPopoverFromRect:senderButton.bounds inView:senderButton permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
pop.passthroughViews = nil;
[yourController release];
[pop release];
}
, где self.popover
- это @property
с сохранением политики.Таким образом, в UIPopoverControllerDelegate
методах (или там, где вы хотите) вы можете освободить свой поповер и / или отклонить его.
Надеюсь, это поможет.
PS Проверьте код, потому что янаписано от руки.
Редактировать
Обычно при создании всплывающего окна его контроллер представления содержимого является либо пользовательским UIViewController
, либо UINavigationController
(в данном случаевы хотите воспользоваться его панелью навигации).
Например, вместо простого UIViewController
, вы можете создать пользовательский
//.h
@interface CustomUIViewController : UIViewController
@end
//.m
@implementation CustomUIViewController
// other code here...
- (void)viewDidLoad
{
// here you are sure that the view has been loaded in memory (alternatively override loadView method), so
UIView* greenView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
green.backgroundColor = [UIColor greenColor];
[self.view addSubview:greenView];
[greenView release];
}
@end
и использовать его внутри popover
- (IBAction)yourAction:(id)sender
UIButton* senderButton = (UIButton*)sender;
CustomUIViewController* yourController = [[CustomUIViewController alloc] init];
// same as before...
}