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

时间:2011-01-28 18:07:32

标签: iphone objective-c ipad uiviewcontroller uipopovercontroller

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

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

我找到了contentSizeForViewInPopover属性,这对于调整视图大小很有用,但是如果在PopOverView中加载视图,我想删除/隐藏元素。

5 个答案:

答案 0 :(得分:1)

我认为不可能。我已经尝试过查看parentViewController的类,以及presentsViewController的类,两者都是null。如果没有它们在UIViewController上提供类似于navigationController属性的属性,则无法完成。

答案 1 :(得分:1)

您可以在类中覆盖以下方法,并使用BOOL变量或某些函数

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

它可能对你有帮助。

答案 2 :(得分:0)

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

@interface CMDetailsViewController : UIViewController
@end

@interface CMDetailsSinglePageViewController : CMDetailsViewController
@end

@interface CMDetailsPopoverViewController : CMDetailsViewController
@end

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

因为你肯定知道你呈现视图控制器的方式:使用let {#1}}(在iPhone上)或UINavigationController(在iPad上),你可以决定创建这两个子类中的哪一个。

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

答案 3 :(得分:-1)

你可以试试这个。我没试过这个。

    if ([viewcontroller.parentViewController isKindOfClass:[UIPopoverController class]]) {
        //do something...
    }

我认为这可能有用。

答案 4 :(得分:-1)

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

使用类似的东西

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