Там нет никакого официального способа сделать это, однако, вы можете получить желаемое поведение, написав пользовательское представление, которое хранит ссылку или делегат взаимодействовать с его видом Предъявления контроллером и добавить его в иерархию представлений. Чтобы действительно почувствовать модальность, вы также можете разместить прозрачную надпись над контроллером представления чуть ниже вашего «модального» представления. Я сделал это в ряде приложений, и он обычно отлично работает. Вам, скорее всего, придется создать пользовательский вид наложения, чтобы вы могли перехватывать штрихи и более элегантно анимировать свою презентацию.
Моя прозрачная накладка, как правило, что-то вроде этого:
@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;
мой взгляд пользовательских модальных обычно что-то вроде этого:
@protocol ModalViewDelegate <NSObject>
- (void)performSelectorOnDelegate:(SEL)selector;
@end
@interface ModalView : UIView {
id<ModalViewDelegate> _delegate;
}
@property(nonatomic, assign) id<ModalViewDelegate> delegate;
На мой взгляд Предъявление контроллер я обычно делаю следующее:
- (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];
}
Использование делегатов, определенных на двух классах, дает мне почти открытый доступ к управлению моим презентационным контроллером, а также мое представление и увольнение по желанию. Единственный недостаток этого заключается в том, когда он используется в представлении с помощью NavigationBar, так как границы представления представления контроллера не будут содержать границ NavigationBar, оставляя его открытым для взаимодействия, есть способы обойти это, но не из них очень хороши (добавление к виду контроллера навигации - один из вариантов).
Вы можете как-то показать popover везде, где вам нравится, с помощью presentPopoverFromRect и даже заставить его вести себя модально, но только недостаток - нет способа спрятать стрелку. – Anna