7

me gustaría utilizar un controlador de vista tanto para una vista iPhone y un iPad PopOverView. Si la vista se muestra en un popover, me gustaría hacer un pequeño reformateado de la interfaz de usuario.¿Es posible que mi UIViewController para detectar si se está mostrando en un UIPopoverController o no?

¿Es posible que mi UIViewController detecte si se muestra en un UIPopoverController?

He encontrado la propiedad contentSizeForViewInPopover, que es ideal para cambiar el tamaño de la vista, pero me gustaría eliminar/ocultar un elemento si la vista se carga en un PopOverView.

+1

Tengo la misma pregunta, pero parece que no hay ninguna manera confiable de hacerlo a partir de iOS 5.0. Así que mi solución es agregar una propiedad BOOL 'popoverMode' dentro del controlador y configurar eso en verdadero siempre que use ese controlador dentro de un popover. – adib

Respuesta

1

No creo que sea posible. He intentado buscar en la clase del parentViewController, así como en la clase del presentadorViewView, y ambos son nulos. Sin ellos proporcionar una propiedad en UIViewController similar a la propiedad navigationController, no se puede hacer.

-1

Puede probar esto. No he probado esto.

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

Creo que esto podría funcionar.

+0

Esto no funcionará porque UIPopoverController no es una subclase de UIViewController; su clase base es NSObject. –

0

Mi enfoque sería usar/crear diferentes subclases UIViewController para cada uno de los 2 tipos de presentación. Muy a menudo pueden compartir una superclase común. Aquí hay un ejemplo:

@interface CMDetailsViewController : UIViewController 
@end 

@interface CMDetailsSinglePageViewController : CMDetailsViewController 
@end 

@interface CMDetailsPopoverViewController : CMDetailsViewController 
@end 

Cada una de estas 2 clases puede personalizar algunos de los comportamientos definidos en su clase base. En su caso, será una lógica de presentación, que supongo que se encuentra en uno de los métodos de apariencia (como -(void)viewWillAppear:(BOOL)animated o alternativo) o -(void)viewDidLoad.

Como definitivamente sabe la forma en que presenta el controlador de vista: usando digamos UINavigationController (en el iPhone) o UIPopoverController (en el iPad), puede decidir cuál de estas 2 subclases crear.

En general, ese sería mi enfoque predeterminado también cuando trabajo en una aplicación universal de iOS. Sistema le permite definir 2 UIApplicationDelegates diferente para cada plataforma, lo que significa que puede utilizar adecuada UIViewControllers sin tener toneladas de if-else para comprobar el dispositivo de la aplicación se puso en marcha.

-1

Puede verificar fácilmente si su dispositivo es un iPad o un iPhone y hacer sus ajustes.

usar algo como esto

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

se puede reemplazar por debajo método en su clase y manejarlo con la variable BOOL o algunas funciones

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

que podría ayudarle.

Cuestiones relacionadas