7

我想爲iPhone視圖和iPad PopOverView使用一個視圖控制器。如果視圖顯示在彈出窗口中,我想對UI進行一些小的重新格式化。我的UIViewController是否可以檢測它是否顯示在UIPopoverController中?

我的UIViewController是否可以檢測它是否顯示在UIPopoverController中?

我發現了contentSizeForViewInPopover屬性,這對於調整視圖大小非常好,但是我想在PopOverView中加載視圖時刪除/隱藏一個元素。

+1

我有同樣的問題,但它看起來像沒有任何可靠的方式來做iOS 5.0的。所以我的解決方法是在控制器內添加一個BOOL屬性'popoverMode',並在popover中使用該控制器時將其設置爲true。 – adib 2011-11-06 07:34:11

回答

1

我不認爲這是可能的。我試過看parentViewController的類,以及presentationViewController的類,並且都是空的。如果沒有他們在UIViewController上提供類似navigationController屬性的屬性,則無法完成。

-1

你可以試試這個。我沒有測試過這個。

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

我認爲這可能有效。

+0

這不起作用,因爲UIPopoverController不是UIViewController的子類;它的基類是NSObject。 – 2013-11-21 11:25:06

0

我的方法是使用/創建不同的UIViewController子類爲每種2種演示文稿。他們經常可以分享一個共同的超類。這裏有一個例子:

@interface CMDetailsViewController : UIViewController 
@end 

@interface CMDetailsSinglePageViewController : CMDetailsViewController 
@end 

@interface CMDetailsPopoverViewController : CMDetailsViewController 
@end 

每個2類可以自定義一些在你的基類中定義的行爲。在你的情況下,它將是一個演示邏輯,我猜想它位於其中一種外觀方法(如-(void)viewWillAppear:(BOOL)animated或替代)或-(void)viewDidLoad。因爲你一定知道你呈現視圖控制器的方式:使用我們說的UINavigationController(在iPhone上)或UIPopoverController(在iPad上),你可以決定創建這兩個子類中的哪一個。

一般來說,這也是我在默認iOS應用程序時的默認方法。系統可讓您爲每個平臺定義2個不同的UIApplicationDelegates,這意味着您可以使用適當的UIViewControllers而不需要大量if-else用於檢查應用程序啓動的設備。

-1

您可以輕鬆檢查您的設備是iPad還是iPhone,並進行調整。

使用這樣的

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

可以覆蓋下面的方法在你的類與布爾變量或某些功能

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

它可以幫助你管理。

相關問題