在UIWebView中导入RTF文件(可编辑内容)

时间:2012-04-20 22:56:11

标签: ios uiwebview attachment rtf

我宣布我的应用程序(富文本编辑器)能够打开任何RTF文件(例如,来自电子邮件附件)。当用户选择附件时,应用程序委托将“loadContent:(NSURL *)url”消息发送到UiwebView控制器。在接收器中,我获取URL并使用

在UIWebView中加载RTF文件
- (void) loadContent: (NSURL *) passedURL
{
    if (passedURL) { 
        [self.myWebView loadRequest:[NSURLRequest requestWithURL:passedURL]];
    } else {
        NSBundle *bundle = [NSBundle mainBundle];
        NSURL *indexFileURL = [bundle URLForResource:@"index" withExtension:@"html"];
        [self.myWebView loadRequest:[NSURLRequest requestWithURL:indexFileURL]];

    }
}

这样做,一切顺利,“myWebView”显示RTF文件的内容。问题是这个视图应该是内容可编辑的,代码应该包含我在“index.html”捆绑文件中的一些javascript。我在启动应用程序时加载。所以我添加了一些代码来提取从RTF文件创建的HTML代码,以便以后能够重新创建完整的代码,将提取的代码插入到这样的标记中:

<div id="content" contenteditable="true"> imported html from rtf should be there</div>

我修改了loadContent方法来获取它。

- (void) loadContent: (NSURL *) passedURL
{
    if (passedURL) { 
        [self.myWebView loadRequest:[NSURLRequest requestWithURL:passedURL]];
        NSString *dum=[self.myWebView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML;"];
        NSLog(@"%@",dum);
    } else {
        NSBundle *bundle = [NSBundle mainBundle];
        NSURL *indexFileURL = [bundle URLForResource:@"index" withExtension:@"html"];
        [self.myWebView loadRequest:[NSURLRequest requestWithURL:indexFileURL]];

    }
}

查看NSLog的结果,我只得到以下html

<div id="content" contenteditable="true">Hello folks</div>

myWebView的HTML内容 BEFORE 我加载了rtf文件......

你知道发生了什么吗?为什么 dum 显示以前的代码,因为显示的myWebView会显示新代码?是因为loadRequest是在一个单独的线程中执行的,而且当执行下一条指令时,myWebView仍然包含以前的代码?

由于

[编辑]我还尝试在webViewDidFinishLoad:delegate方法中使用NSLog weblog的内容,但得到相同的结果:在打开RTF附件文件之前,此webView的内容。是否可以以同步方式发出加载请求?

1 个答案:

答案 0 :(得分:2)

这是因为loadRequest是异步的。在尝试NSLog之前,您需要等待负载完成。看一下UIWebViewDelegate文档。在webViewDidFinishLoad内部/之后尝试NSLog:你应该得到更好的结果。