2

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

通过使用安装了 iOS 5 的 iPad 测试我的应用程序,我发现我的“模态”弹出框存在问题:可以通过在其外部点击来关闭它,换句话说,它不是模态的!我不知道我做错了什么。

视图控制器使用以下代码打开弹出框:

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

弹出框内的视图控制器的 viewDidLoad 中有这一行。

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

    // Do other stuff
}

有什么遗漏吗?

4

3 回答 3

10

我找到了。setModalInPopover 赋值必须在嵌入式视图控制器的 viewDidAppear 方法内,才能使弹出框成为模态:

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

    [self setModalInPopover:YES];
}
于 2011-10-19T08:13:48.767 回答
1

如果您使用的自定义视图控制器知道视图将在弹出窗口中显示,则批准的答案将起作用。但是,如果您使用以编程方式创建的通用视图控制器或viewDidAppear您无法覆盖其方法的视图控制器,您也可以UIPopoverControllerDelegate在类中实现协议,将弹出框委托设置为该类并返回 NO , 在popoverControllerShouldDismissPopover.

例子

在一些实现 UIPopoverControllerDelegate 的类中:

- (BOOL) popoverControllerShouldDismissPopover:(UIPopoverController *) popoverController {
    return NO;
}

在创建弹出框控制器的代码中:

UIPopoverController * pc = initialize and setup 

pc.delegate = instance of class that impleements UIPopoverControllerDelegate
于 2011-11-18T19:25:57.670 回答
0

您是否尝试过设置modalInPopover导航控制器的属性?这是实际上由弹出框“拥有”的视图控制器,所以我希望弹出框使用它的modalInPopover属性来确定它是否是模态的。

在 iOS 4.x 中,也许UINavigationController确实将它传递给了它当前可见的子视图控制器。

于 2011-10-18T12:20:21.593 回答