如果你想要做的是在應用程序中顯示的任何視圖控制器之上以模態方式顯示UIWebView
,則不需要「最高」視圖控制器。獲取根視圖控制器就足夠了。無論何時,只要我想展示一切視圖,我都會一直這樣做。 你只需要在你的庫根視圖控制器的引用:
self.rootVC = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
有了這個參考你現在兩個選擇:
第一種是使用UIViewController
的方法presentViewController:animated:completion:
顯示另一個查看控制器,將包含UIWebView
第二個選項是假模態視圖控制器通過增加覆蓋整個屏幕,有一個(半)透明背景,幷包含要顯示「模態」視圖中的子視圖。這裏是一個例子:
@interface FakeModalView : UIView // the *.h file
@property (nonatomic, retain) UIWebView *webView;
@property (nonatomic, retain) UIView *background; // this will cover the entire screen
-(void)show; // this will show the fake modal view
-(void)close; // this will close the fake modal view
@end
@interface FakeModalView() // the *.m file
@property (nonatomic, retain) UIViewController *rootVC;
@end
@implementation FakeViewController
@synthesize webView = _webView;
@synthesize background = _background;
@synthesize rootVC = _rootVC;
-(id)init {
self = [super init];
if (self) {
[self setBackgroundColor: [UIColor clearColor]];
_rootVC = self.rootVC = [[[[[UIApplication sharedApplication] delegate] window] rootViewController] retain];
self.frame = _rootVC.view.bounds; // to make this view the same size as the application
_background = [[UIView alloc] initWithFrame:self.bounds];
[_background setBackgroundColor:[UIColor blackColor]];
[_background setOpaque:NO];
[_background setAlpha:0.7]; // make the background semi-transparent
_webView = [[UIWebView alloc] initWithFrame:CGRectMake(THE_POSITION_YOU_WANT_IT_IN)];
[self addSubview:_background]; // add the background
[self addSubview:_webView]; // add the web view on top of it
}
return self;
}
-(void)dealloc { // remember to release everything
[_webView release];
[_background release];
[_rootVC release];
[super dealloc];
}
-(void)show {
[self.rootVC.view addSubview:self]; // show the fake modal view
}
-(void)close {
[self removeFromSuperview]; // hide the fake modal view
}
@end
如果您有任何其他問題,請讓我知道。
希望這會有所幫助!
嗯,如果這個作品,我會感到驚訝。除非我瘋了,否則keyWindow會返回最後一次調用到'makeKeyAndVisisble'的當前可見窗口。 要獲得當前呈現的視圖控制器,這一切都取決於您的層次結構。如果你有一個模態屏幕,那麼它,如果沒有,你有導航控制器作爲根你必須看堆棧的頂部。 我覺得它會很難找到頂級視圖控制器給出了很多方法來設置導航圖層。 – feliun
我想你會想要將當前視圖控制器作爲屬性傳遞給你的庫。 –
@MarcusAdams這絕對是一個選項,但我試圖使這個透明的開發人員使用靜態庫。 – pshah