正确解雇popover ViewController或模态ViewController

时间:2014-03-11 07:54:07

标签: ios iphone objective-c ipad uiviewcontroller

我正在构建一个通用应用程序,它应该提供一个视图控制器来添加内容。在iPad上,它在popover和iPhone上以模式viewController显示。我使用展示ViewController作为delegate

现在,如果我要分配properController,我必须:

if([[segue identifier] isEqualToString:@"popoverAddSegue"])  
    self.myPopOver = [(UIStoryboardPopoverSegue * )segue popoverController];
if([[segue identifier] isEqualToString:@"modalAddSegue"])
    self.myModalView = [segue destinationViewController];

因此使用两个属性并且只分配一个属性。 然后,在我的委托函数中,我再次必须区分:

if(self.myPopOver)
    [self.myPopOver dismissPopoverAnimated:YES];
if(self.myModalView)
    [self.myModalView dismissViewControllerAnimated:YES completion:nil];

问题显然是UIPopoverController不会从UIViewController继承......有没有优雅的方法呢?工厂还是什么?我讨厌在viewController中使用自定义代码来解释它如何呈现viewControllers ...

1 个答案:

答案 0 :(得分:0)

我用这个

 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
     // The device is an iPhone or iPod touch.
 } else {
     // The device is an iPad => show library true popover.
 }

这不是你要求的,但它有一个好处:你可以为iPhone和iPad提供相同的segue标识符。

现在为两个(popover / modalVC)提供一个类似的方法,可能你可以添加一个方法名称为dismissAnimated的新类别: