iOS:在UIWebView上方显示模态视图

3

是否可以在UIWebView上方显示模态视图?我有一个UIViewController,其中加载了一个WebView。然后,我想推送一个模态视图控制器,以便模态视图暂时覆盖WebView...

WebView正常工作;以下是它在视图控制器中的加载方式:

- (void)loadView {

    // Initialize webview and add as a subview to LandscapeController's view
    myWebView = [[[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
    myWebView.scalesPageToFit = YES;
    myWebView.autoresizesSubviews = YES;
    myWebView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);  
    myWebView.delegate = self;
    self.view = myWebView; 
}

如果我试图在viewDidLoad中加载模态视图控制器,但是没有模态视图出现:
- (void)viewDidLoad {

    [super viewDidLoad];

    // Edit dcftable.html with updated figures
    NSMutableString *updated_html = [self _updateHTML:@"dcftable"];

    // Load altered HTML file as an NSURL request
    [self.myWebView loadHTMLString:updated_html baseURL:nil];

    // If user hasn't paid for dcftable, then invoke the covering modal view
    if (some_condition) {

        LandscapeCoverController *landscapeCoverController = [[[LandscapeCoverController alloc] init] autorelease ];
        [self presentModalViewController:landscapeCoverController animated:YES];    
    }   


}

我怀疑需要对UIWebView委托进行一些操作,以使其接收新的模态视图...但是无法在任何地方找到相关讨论或示例...再次强调目标是调用一个覆盖在WebView顶部的模态视图。
提前感谢您的任何想法!
2个回答

4
我遇到了同样的问题。将 presentModalViewController 方法从 viewDidLoad 移动到 viewDidAppear 就解决了问题。

谢谢Chris!正如你所说,我实际上让它工作了。我不确定为什么它能工作...但至少它能工作。非常感谢! - Sly
顺便说一下,如果有其他人在阅读这篇文章...模态视图实际上并没有达到我在这里的目标效果。当模态视图出现时,背景完全变成了白色,而不是能够模糊地看到Web视图作为背景。哦,好吧...至少这可能会帮助到某个人! - Sly

0

我也无法在viewDidLoad中使其工作,但我在另一个方法中使其工作了。这是我所做的:

- (void)viewDidLoad {
    ...

    if (some_condition) {
        [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(showModal) userInfo:nil repeats:NO];
    } 
}

- (void)showModal {
    LandscapeCoverController *landscapeCoverController = [[[LandscapeCoverController alloc] init] autorelease ];
    [self presentModalViewController:landscapeCoverController animated:YES];    
}

基本上,如果它不是在viewDidLoad中被调用,它就可以工作。我希望我能解释为什么,我自己也很好奇,但这至少可以解决你的问题。

希望这可以帮助你!


可能更简单的方法是使用[self performSelector:@selector(showModal) withObject:nil afterDelay:0.2];而不是计时器。 - Domestic Cat
嘿,感谢donkim的快速和完整的回复!在这种情况下,您提供的代码实际上对我不起作用。不确定为什么,但我认为模态视图必须从viewDidAppear中调用。 - Sly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接