【问题标题】:Is it possible for my UIViewController to detect whether it is being displayed in a UIPopoverController or not?我的 UIViewController 是否可以检测到它是否显示在 UIPopoverController 中?
【发布时间】:2011-01-28 18:07:32
【问题描述】:

我想为 iPhone 视图和 iPad PopOverView 使用一个视图控制器。如果视图显示在弹出窗口中,我想对 UI 进行一些小的重新格式化。

我的 UIViewController 是否可以检测它是否显示在 UIPopoverController 中?

我找到了 contentSizeForViewInPopover 属性,该属性非常适合调整视图大小,但如果视图加载到 PopOverView 中,我想删除/隐藏元素。

【问题讨论】:

  • 我有同样的问题,但从 iOS 5.0 开始似乎没有任何可靠的方法可以做到这一点。所以我的解决方法是在控制器内添加一个 BOOL 属性“popoverMode”,并在我在弹出框内使用该控制器时将其设置为 true。

标签: iphone objective-c ipad uiviewcontroller uipopovercontroller


【解决方案1】:

我认为这是不可能的。我试过查看 parentViewController 的类,以及 presentingViewController 的类,都为空。如果没有他们在 UIViewController 上提供类似于 navigationController 属性的属性,就无法完成。

【讨论】:

    【解决方案2】:

    你可以在你的类中重写下面的方法并使用 BOOL 变量或一些函数来管理它

    - (CGSize)contentSizeForViewInPopover
    {
        popovermode = YES;
        [self callhideMethod];
        return CGSizeMake(320, 200);
    }
    

    也许对你有帮助。

    【讨论】:

      【解决方案3】:

      我的方法是为这两种演示文稿中的每一种使用/创建不同的 UIViewController 子类。他们经常可以共享一个共同的超类。这是一个例子:

      @interface CMDetailsViewController : UIViewController
      @end
      
      @interface CMDetailsSinglePageViewController : CMDetailsViewController
      @end
      
      @interface CMDetailsPopoverViewController : CMDetailsViewController
      @end
      

      这两个类中的每一个都可以自定义基类中定义的一些行为。在您的情况下,它将是一个表示逻辑,我猜它位于外观方法之一(如-(void)viewWillAppear:(BOOL)animated 或替代方法)或-(void)viewDidLoad

      您肯定知道您呈现视图控制器的方式:使用UINavigationController(在 iPhone 上)或 UIPopoverController(在 iPad 上),您可以决定创建这两个子类中的哪一个.

      一般来说,当我在通用 iOS 应用程序上工作时,这也是我的默认方法。系统允许您为每个平台定义 2 个不同的UIApplicationDelegates,这意味着您可以使用适当的UIViewControllers,而无需使用大量 if-else 来检查启动应用程序的设备。

      【讨论】:

        【解决方案4】:

        您可以轻松检查您的设备是 iPad 还是 iPhone 并进行调整。

        使用类似的东西

        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
        {
             // The device is an iPad
        }
        else
        {
             // The device is an iPhone or iPod touch.
        } 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-05-23
          • 2011-08-25
          • 2010-10-02
          • 1970-01-01
          • 2011-04-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多