我想为iPhone视图和iPad PopOverView使用一个视图控制器。如果视图显示在弹出窗口中,我想对UI进行一些小的重新格式化。
我的UIViewController是否可以检测它是否在UIPopoverController中显示?
我找到了contentSizeForViewInPopover属性,这对于调整视图大小很有用,但是如果在PopOverView中加载视图,我想删除/隐藏元素。
答案 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.
}