2011-10-18 127 views
2

首先,我们可以在这里讨论iOS 5吗?或者它仍然在NDA之下? 如果我们不能谈论它,就忽略我的问题。模态提供的UIPopoverController在iOS 5中无法正常工作

通过使用安装了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 
} 

有什么遗漏吗?

回答

10

我找到了。该setModalInPopover分配必须是嵌入式视图控制器的viewDidAppear方法里面的酥料饼是模态:

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

    [self setModalInPopover:YES]; 
} 
+2

看起来像一个bug给我。我需要在viewDidAppear方法中放置'[self setModalInPopover:[self isModalInPopover]];',因为我在创建视图控制器的代码中外部设置此值。 – zeroimpl

0

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

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

+0

你是正确的,这是有道理的,它应该工作,如果我设置了导航控制器的modalInPopover属性。但是这种方式不行。不过,我找到了解决方案。我会很快发布它,它可能会帮助其他人。 – strave

1

,如果您使用的是知道视图中的自定义视图控制器经批准的答案将工作将是一个在popover中。但是,如果您正在使用以编程方式创建的通用视图控制器或其视图控制器的viewDidAppear方法无法因任何原因而重写,则还可以在类中实现UIPopoverControllerDelegate协议,将popover委托设置为该类,并且返回NO,在popoverControllerShouldDismissPopover

在某些类,它实现UIPopoverControllerDelegate:

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

在代码中创建您的酥料饼的控制器:

UIPopoverController * pc = initialize and setup 

pc.delegate = instance of class that impleements UIPopoverControllerDelegate 
相关问题