【问题标题】:UIWebView doesn't seem to be loading the pageUIWebView 似乎没有加载页面
【发布时间】:2009-05-28 19:25:21
【问题描述】:

我有一个基于导航控制器的应用程序,它下载 RSS 提要并在 TableView 中布置项目标题。那部分有效。当我单击文章标题时,我想将 FeedArticleController 的一个实例推送到导航堆栈上。 FeedArticleController loadView 方法设置视图(因为我想学习如何以编程方式而不是使用 IB 来执行此操作)。这是加载视图:

- (void)loadView {
    UIView *view = [[UIView alloc] init];
    self.view = view;

    webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    webView.delegate = self;

    [view addSubview:webView];
}

这有意义吗? 现在,为了让 webView 真正加载页面,我有这个 viewDiDLoad 方法:

- (void)viewDidLoad {
    [super viewDidLoad];
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]]; 
}

然后我有委托方法,webViewDidStartLoad 和 webViewDidFinishLoad。他们只是打印到 NSLog。

我在构建和添加视图的方式上是否遗漏了什么?委托方法似乎在延迟后打印到日志中,并且在实例化 webView 时在线上有流量。所以,我认为它正在加载页面,但没有显示?

谢谢大家。

【问题讨论】:

    标签: iphone objective-c uiwebview


    【解决方案1】:

    这里有两件事要研究:

    1. 将 Web 视图的 autoresizingMask 设置为 UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight 以使 Web 视图在其父级调整大小时调整大小。这是因为默认情况下,您创建的父 UIView 和 UIWebView 都有零帧 (0,0,0,0)。通过设置此项,当父级在进入屏幕之前调整大小时,Web 视图将调整大小以匹配。
    2. 不要使用单独的 UIView 实例,只需将 self.view 设置为您的 UIWebView 实例即可。

    我推荐第二个选项,除非你真的需要你的控制器中的另一个视图。另外,我应该在这里指出,您在上面的代码 sn-p 中同时泄漏了 UIView 和 UIWebView。这可能会被简化,但如果不是,您应该在分配视图后释放它们。这是实现上述解决方案 2 的示例:

    - (void) loadView
    {
        webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
        webView.delegate = self;    // weak reference: doesn't retain self
        self.view = webView;        // strong reference: retains webView
        [webView release];          // release initial reference: now 'owned' through self.view
    }
    

    【讨论】:

    • 感谢您的评论。我并不总是确定是否应该在创建实例的方法中或在类的 dealloc 方法中释放实例。
    猜你喜欢
    • 2013-10-08
    • 1970-01-01
    • 2017-10-15
    • 2021-09-20
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多