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.
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