我正在构建一个通用应用程序,它应该提供一个视图控制器来添加内容。在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
...
答案 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的新类别: