No hay manera oficial a hacer esto sin embargo se puede obtener el comportamiento deseado por escrito una vista personalizada que mantiene una referencia o un delegado para interactuar con su controlador de vista de presentación y de añadir a la jerarquía de vistas. Para realmente obtener la sensación modal, también puede colocar una superposición transparente sobre el controlador de presentación justo debajo de su vista 'modal'. Lo he hecho en varias aplicaciones y generalmente funciona muy bien. Es probable que necesite hacer una vista de superposición personalizada para que pueda interceptar toques y animar más elegantemente su presentación.
Mi superposición transparente suele ser algo como esto:
@protocol TransparentOverlayDelegate <NSObject>
@optional
- (void)transparentOverlayWillDismiss:(TransparentOverlay *)backgroundTouch;
- (void)transparentOverlayDidDismiss:(TransparentOverlay *)backgroundTouch;
@end
@interface TransparentOverlay : UIView {
id<TransparentOverlayDelegate> _delegate;
UIView *_contentView;
CGFloat _pAlpha;
}
@property(nonatomic, assign) id<TransparentOverlayDelegate> delegate;
@property(nonatomic, retain) UIView *contentView;
@property(nonatomic, assign) CGFloat pAlpha;
- (void)presentTransparentOverlayInView:(UIView *)view;
- (void)dismissTransparentOverlay:(BOOL)animated;
Mi punto de vista modal costumbre es generalmente algo como esto:
@protocol ModalViewDelegate <NSObject>
- (void)performSelectorOnDelegate:(SEL)selector;
@end
@interface ModalView : UIView {
id<ModalViewDelegate> _delegate;
}
@property(nonatomic, assign) id<ModalViewDelegate> delegate;
En mi controlador de vista presentando lo general se haga lo siguiente:
- (void)presentModalController {
TransparentOverlay *to = [[[TransparentOverlay alloc] initWithFrame:self.view.bounds] autorelease];
to.delegate = self;
ModalView *mv = [[ModalView alloc] initWithFrame:CGRectMake(500, 500, 300, 300)];
mv.delegate = self;
to.contentView = mv;
[mv release];
[to presentTransparentOverlayInView:self.view];
}
Uso de los delegados definidos en las dos clases me da acceso bastante abierto para manipular mi controlador de presentación, así como mi presentación y despedida, según lo deseado. La única desventaja de esto es cuando se usa en una vista con una NavigationBar, ya que los límites de la vista del controlador que presenta no contendrán los límites de la NavigationBar, dejándola abierta para la interacción, hay formas de evitar esto, pero no de ellos. son muy bonitos (agregar una vista a la vista del controlador de navegación es una opción).
Puede mostrar un popover donde lo desee utilizando presentPopoverFromRect e incluso hacerlo comportarse modalmente, pero el único inconveniente es que no hay forma de ocultar la flecha. – Anna