UIPopoverController以模态方式呈现在iOS 5中不起作用

str*_*ave 2 ipad uipopovercontroller ios ipad-2 ios5

首先,我们可以在这里讨论iOS 5吗?或者它仍然在NDA下?如果我们不能谈论它,请忽略我的问题.

通过使用安装了iOS 5的iPad测试我的应用程序,我发现我的"模态"弹出窗口有问题:可以通过点击它来关闭它,换句话说,它不是模态的!我不知道我做错了什么.

视图控制器使用以下代码打开popover:

AddProjectViewController *addProjectViewController = [[AddProjectViewController alloc] initWithStyle:UITableViewStyleGrouped];
[addProjectViewController setDelegate:self];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:addProjectViewController];
[addProjectViewController release];

CGRect popoverFrame = [sender frame];

UIPopoverController *tempPopover = [[UIPopoverController alloc] initWithContentViewController:navController];
[tempPopover presentPopoverFromRect:popoverFrame inView:[self view] permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
self.currentPopover = tempPopover;
[tempPopover release];
[navController release];
Run Code Online (Sandbox Code Playgroud)

弹出窗口内的视图控制器在其viewDidLoad中有这一行.

- (void)viewDidLoad
{
    [self setModalInPopover:YES];

    // Do other stuff
}
Run Code Online (Sandbox Code Playgroud)

有什么遗漏?

str*_*ave 10

我找到了.setModalInPopover赋值必须位于嵌入式视图控制器的viewDidAppear方法内,以使弹出窗口为模态:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    [self setModalInPopover:YES];
}
Run Code Online (Sandbox Code Playgroud)

  • 对我来说似乎是一个错误.我需要在viewDidAppear方法中放置`[self setModalInPopover:[self isModalInPopover]];`,因为我在创建视图控制器的代码中将此值设置为外部. (2认同)