Nie ma oficjalny sposób, aby to zrobić, jednak można uzyskać pożądane zachowanie pisząc własny widok, który utrzymuje odwołanie lub pełnomocnika do współdziałania z kontrolerem widoku przedstawianie i dodanie go do hierarchii widoku. Aby naprawdę uzyskać wrażenie modalne, można również umieścić przezroczystą nakładkę na kontrolerze prezentacji tuż poniżej widoku "modalnego". Zrobiłem to w wielu aplikacjach i zazwyczaj działa świetnie. Najprawdopodobniej będziesz musiał utworzyć niestandardowy widok nakładki, aby można było przechwycić dotknięcia i bardziej elegancko ożywić jego prezentację.
Moja przezroczysta nakładka jest zwykle coś takiego:
@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;
Mój widok niestandardowy modalna jest zazwyczaj coś takiego:
@protocol ModalViewDelegate <NSObject>
- (void)performSelectorOnDelegate:(SEL)selector;
@end
@interface ModalView : UIView {
id<ModalViewDelegate> _delegate;
}
@property(nonatomic, assign) id<ModalViewDelegate> delegate;
moim zdaniem przedstawianie kontrolera I zazwyczaj należy wykonać następujące czynności:
- (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];
}
Korzystanie z delegatów zdefiniowanych na dwóch zajęciach daje mi prawie otwarty dostęp do manipulowania moim kontrolerem prezentacji, a także do mojej prezentacji i zwolnienia zgodnie z życzeniem. Jedynym minusem tego jest użycie go w widoku z pasem nawigacyjnym, ponieważ granice widoku kontrolera prezentującego nie zawierają granic paska nawigacyjnego pozostawiając go otwartego do interakcji, istnieją sposoby na obejście tego, ale nie na ich temat są bardzo ładne (dodanie do widoku kontrolera nawigacyjnego jest jedną z opcji).
Możesz pokazać coś w stylu popover, gdziekolwiek chcesz za pomocą presentPopoverFromRect, a nawet sprawić, żeby zachowywał się modalnie, ale jedyną wadą jest to, że nie ma sposobu na ukrycie strzałki. – Anna