还有就是要做到这一点,但是你可以通过写这使参考或委托其呈现视图控制器交互的自定义视图并将其添加到视图层次获得所需的行为没有正式的办法。要真正获得模态感,您还可以在“模态”视图下方的展示控制器上放置透明覆盖层。我已经在很多应用程序中完成了这项工作,并且通常效果很好。您可能需要制作自定义叠加视图,以便拦截触摸并更优雅地呈现其演示文稿。
我的透明覆盖层通常是这样的:
@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的边界,从而将其打开以进行交互,所以有办法解决这个问题,但不能解决这个问题非常漂亮(添加到导航控制器的视图是一种选择)。
来源
2012-01-28 14:53:28
RLB
您可以使用presentPopoverFromRect在任何地方显示弹出窗口,甚至可以使其表现模态,但只有缺点是无法隐藏箭头。 – Anna 2010-11-01 03:04:17