2015-02-17 43 views
1

我是DTCoreText將HTML轉換爲屬性文本。因爲我想先設置字體,而不是之後會覆蓋所有粗體,斜體等等標記我想在構造函數中設置文檔屬性。這個構造函數想讓我給出一個AutoreleasingUnsafeMutablePointer,它或多或少似乎是一個NSDictionary?預先與&。有點。只有它不允許我以任何方式設置它。我試過.memory,試圖以任何可能的方式投射字典,它只是不接受任何數據。Swift:fill AutoreleasingUnsafeMutablePointer <NSDictionary?>

let font = UIFont.systemFontOfSize(12) 
    let data = info.desc?.dataUsingEncoding(NSUTF8StringEncoding) 
    let attributes: NSMutableDictionary? = NSMutableDictionary() 
    attributes!.setObject(font, forKey: NSFontAttributeName) 
    var attributeRef: AutoreleasingUnsafeMutablePointer<NSDictionary?> = AutoreleasingUnsafeMutablePointer.null() 
    NSMutableAttributedString(HTMLData: data, documentAttributes: nil) 
    //attributeRef = *attributeDict 
    let attributedString = NSMutableAttributedString(HTMLData: data, documentAttributes:attributeRef) 
    let paragraphStyle: NSMutableParagraphStyle = NSMutableParagraphStyle() 
    paragraphStyle.lineBreakMode = NSLineBreakMode.ByWordWrapping; 
    let range = NSMakeRange(0, attributedString.length) 
    attributedString.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: range) 
    lblMessage.attributedText = attributedString 
+1

您是否知道DTCoreText不再需要? iOS現在允許您直接將HTML轉換爲NSAttributedString。 – matt 2015-02-17 21:54:05

+0

謝謝馬特!不幸的是,本地調用仍然需要相同的AutoreleasingUnsafeMutablePointer :( – 2015-02-17 22:05:09

+1

只要說'var dict = NSDictionary?()'並傳遞'&dict';或者'nil'如果你不需要結果字典 – matt 2015-02-17 22:46:07

回答

6

此時您不應該使用DTCoreText; iOS現在有本地調用。只要說var dict = NSDictionary?()並通過&dict。以下是示例代碼:

let s = "<html><body><h1>Howdy</h1><p>Hello</p></body></html>" 
let d = s.dataUsingEncoding(NSUTF16StringEncoding, allowLossyConversion: false) 
var dict = NSDictionary?() 
let att = NSAttributedString(data: d!, options: [ 
    NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType 
    ], documentAttributes: &dict, error: nil) 
println(att!) 
println(dict!) 

您會看到,這很好地工作。這裏是dict

BottomMargin = 72; 
Converted = "-1"; 
DocumentType = NSHTML; 
LeftMargin = 90; 
PaperMargin = "UIEdgeInsets: {72, 90, 72, 90}"; 
PaperSize = "NSSize: {612, 792}"; 
RightMargin = 90; 
TopMargin = 72; 
UTI = "public.html"; 

不過,我通常通過nil,因爲沒有什麼是回來的,我真正關心的第二個字典。

+1

注意,這不會設置HTML的默認字體,因爲OP是詢問'NSAttributedString'的API並不適用於HTML,因此大多數人只是在將字體規範添加到HTML/CSS之前將其投入到'NSAttributedString':[這是一個示例](http://jmduke.com/posts/markdown-in-swift /) – rickster 2015-02-17 23:14:17

+0

@rickster或者你可以形成屬性化的字符串,然後遍歷樣式運行改變字體。 – matt 2015-02-17 23:55:42

+0

@rickster好主意,想我會結束這樣做 – 2015-02-18 11:24:51

相關問題