4

我正在使用Xcode 4.5和新的iOS 6功能来展开segues。我提出其由栏按钮项编程呈现的酥料饼内的导航视图控制器:在Xcode Storyboard中关闭使用Unwind Segue的弹出对话

- (IBAction)configChartTapped:(id)sender 
{ 
    if (self.popover.isPopoverVisible) { 

     [self.popover dismissPopoverAnimated:YES]; 

    } else { 
     UINavigationController *chartConfigNavigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"GrowthChartNavigationController"]; 

     ConfigChartTypeViewController *configChartTypeViewController = (ConfigChartTypeViewController*) chartConfigNavigationController.topViewController; 

     self.popover = [[UIPopoverController alloc]initWithContentViewController:chartConfigNavigationController]; 
     self.popover.popoverContentSize = CGSizeMake(320, 500); 
     self.popover.delegate = self; 

     [self.popover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    } 
} 

接着该方法我已经定义的目标来放松所述SEGUE(即驳回酥料饼)...

- (IBAction)cancelConfig:(UIStoryboardSegue *)segue 
{ 
    // 
} 

...并将其连接到导航视图控制器导航栏中的取消按钮。

将取消栏按钮连接到cancelConfig按钮在Xcode中工作正常。

但是,当运行代码时,尽管Xcode 4.5应该支持在展开segues(根据发行版文档)时支持解散popovers,但单击Cancel按钮时没有任何反应。

我错过了什么?

谢谢!

+0

嗨,你找到了解决办法吗?我也被困在这里 – dan

+0

丹,不幸的是我还没找到解决这个问题的方法。我仍然在使用古老的代表团,并希望苹果很快就能解决这个问题。请让我知道您何时找到解决方案。 – AlexR

回答

5

展开segues使用运行时搜索,首先要求父视图控制器沿着通过segue呈现的视图控制器链走直到找到正确的展开方法。但是这里没有链,因为popover是以编程方式创建的,而不是使用popover segue。

由于没有segue链接回到父视图控制器,所以没有发生回调。展开细分是一种抽象的委托形式,所以这与忘记设置委托并且不接收任何回调相似。

解决方法是在Interface Builder中使用segue创建popover,而不是使用configChartTapped:方法以编程方式创建它。

步骤:

首先,从在呈递视图控制器到栏按钮项控制拖动呈现视图控制器和选择酥料饼SEGUE:

enter image description here

呈现视图控制器,实现prepareForSegue:抢到引用酥料饼的控制器:

- (void)prepareForSegue:(UIStoryboardPopoverSegue *)segue 
       sender:(id)sender { 
    self.popover = segue.popoverController; 
} 

然后实现shouldPerformSegueWithIdentifier:恢复 类似的显示/隐藏行为configChartTapped:

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    if (self.popover.isPopoverVisible) { 
     [self.popover dismissPopoverAnimated:YES]; 
     return NO; 
    } else { 
     return YES; 
    } 
} 

最后,在界面生成器,设置正确的酥料饼的内容大小为呈现视图控制器:

enter image description here

这将让你攻从酥料饼的取消按钮时放松对cancelConfig:,并攻呈现它的按钮时,还显示/隐藏酥料饼。

+0

这是一个简单的方法检查答案http://stackoverflow.com/questions/28247727/unwind-segue-doesnt-dismiss-adaptive-popover-presentation-when-not-modal – DogCoffee

相关问题