在运行时在IOS中添加到textarea或webview的字体?

时间:2012-10-22 14:28:50

标签: ios uiwebview fonts

我想在运行时将自定义字体添加到IOS应用程序,并在可编辑的textarea或带有contentEditable =“on”的UIWebView中使用它。

我知道如何在编译时捆绑自定义字体,但我需要在运行时执行此操作。

这些替代方案是否可行:

  • 通过互联网下载字体并存储在apps文档文件夹中?
  • 使用http地址参考外部字体?
  • 通过iTunes传输字体?

iOS6中的标签和富文本编辑有很多改进,我希望自定义字体支持也有所改进。

1 个答案:

答案 0 :(得分:1)

回答我自己的问题。

我还没有找到一种方法在iOS中使用原生textarea而不在plist文件中注册字体。

然而,UIWebView确实支持@ font-face声明和.ttf文件。诀窍是创建一个指向存储在Documents文件夹中的字体的NSURL,然后通过使用[webView stringByEvaluatingJavaScriptFromString]告诉Web视图使用它。

在我的第一次测试中,我做了类似的事情:

我的视图控制器:

- (NSString *)documentsDirectory {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                         NSUserDomainMask, YES);
    return [paths objectAtIndex:0];
}

- (void) setFont {
    NSString *urlPath = [[self documentsDirectory]
                         stringByAppendingPathComponent:@"myfont.ttf"];
    NSURL *url = [NSURL fileURLWithPath:urlPath];
    [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"setFont('%@');", url]];
}

在我的网页中:

<style>       
    body {
        font-family: customfont;
        font-size: 40px;
    }        
</style>
<script>
    function setFont(font) {
        var id = 'customfont',
            head = document.getElementsByTagName("head")[0],
        style;

        style = document.getElementById(id);
        if(style) {
            head.removeChild(style);
        }

        style = document.createElement("style");
        style.setAttribute("id", id);
        style.textContent = "@font-face { font-family: '" + id + "'; src: url('" + font + "'); font-weight: normal; font-style: normal; }"
        head.appendChild(style);
    }
</script>