還有就是要做到這一點,但是你可以通過寫這使參考或委託其呈現視圖控制器交互的自定義視圖並將其添加到視圖層次獲得所需的行爲沒有正式的辦法。要真正獲得模態感,您還可以在「模態」視圖下方的展示控制器上放置透明覆蓋層。我已經在很多應用程序中完成了這項工作,並且通常效果很好。您可能需要製作自定義疊加視圖,以便攔截觸摸並更優雅地呈現其演示文稿。
我的透明覆蓋層通常是這樣的:
@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