【问题标题】:Properly dismissing either popover ViewController or modal ViewController正确关闭 popover ViewController 或 modal ViewController
【发布时间】:2014-04-14 16:43:12
【问题描述】:

我正在构建一个通用应用程序,它应该提供一个视图控制器来添加东西。在 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...

【问题讨论】:

    标签: ios iphone objective-c ipad uiviewcontroller


    【解决方案1】:

    我用这个

     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 标识符。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 2023-04-11
      • 2012-09-19
      • 1970-01-01
      • 2012-03-23
      • 2021-05-04
      相关资源
      最近更新 更多