Возможно ли, чтобы мой UIViewController обнаруживал, отображается ли он в UIPopoverController или нет? - PullRequest
7 голосов
/ 28 января 2011

Я хотел бы использовать один контроллер вида как для iPhone, так и для iPad PopOverView.Если представление отображается во всплывающем окне, я хотел бы выполнить небольшое переформатирование пользовательского интерфейса.

Возможно ли, чтобы мой UIViewController обнаружил, отображается ли оно в UIPopoverController?

Я обнаружил свойство contentSizeForViewInPopover, которое отлично подходит для изменения размера представления, но я хотел бы удалить / скрыть элемент, если представление загружено в PopOverView.

Ответы [ 5 ]

1 голос
/ 03 апреля 2014

вы можете переопределить метод ниже в вашем классе и управлять им с помощью переменной BOOL или некоторых функций

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

это может помочь вам.

1 голос
/ 14 августа 2013

Я не думаю, что это возможно.Я попытался посмотреть на класс parentViewController, а также на класс presentingViewController, и оба они имеют значение null.Без предоставления свойства на UIViewController, подобного свойству navigationController, это невозможно сделать.

0 голосов
/ 28 ноября 2013

Вы можете легко проверить, является ли ваше устройство iPad или iPhone, и внести свои коррективы.

Используйте что-то вроде этого

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
     // The device is an iPad
}
else
{
     // The device is an iPhone or iPod touch.
} 
0 голосов
/ 20 ноября 2013

Мой подход заключается в использовании / создании различных подклассов 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), вы можете решить, какой из этих 2 подклассов создать .

В целом, это мой подход по умолчанию, даже когда я работаю с универсальным приложением для iOS. Система позволяет вам определить 2 различных UIApplicationDelegates для каждой платформы, что означает, что вы можете использовать соответствующий UIViewControllers, не имея тонны if-else для проверки устройства, на котором было запущено приложение.

0 голосов
/ 20 ноября 2013

Вы можете попробовать это.Я не проверял это.

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

Думаю, это может сработать.

...