你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS技巧綜合 >> 用NSAttributedString實現簡單的圖文混排

用NSAttributedString實現簡單的圖文混排

編輯:IOS技巧綜合
[摘要]本文是對用NSAttributedString實現簡單的圖文混排的講解,對學習IOS蘋果軟件開發有所幫助,與大家分享。

iOS7以後,因為TextKit的強大,可以用NSAttributedString很方便的實現圖文混排(主要是利用了NSTextAttachment)。 關於Textkit的牛逼之處,可以參考objcio上的文章(https://objccn.io/issue-5-1/) 我用NSAttributedString仿寫了一個知乎的輸入框(低仿,就是有個功能而已),效果如圖: demo在這裡:(https://github.com/Phelthas/TEST_XMLCommon 的第四個) 有幾個需要注意的地方,值得記錄一下: 1,textView有個 typingAttributes屬性,可以讓輸入的文字自動變成NSAttributedString,根本不用自己去設置AttributedText; 2,textView有個 selectedRange屬性,就是指當前的光標的位置,可以用來確定插入圖片的位置; 3,如果打斷點觀察textView.text可以發現,插入的圖片被替換成一個特殊的UTF8字符“\U0000fffc”,這個字符在iOS設備上不會顯示,不是空格,不是換行, 但是,它是存在的!!!它有location,有length(就是1),在整個字符串中有位置(NSRage),所以應該把它當成一個占位的字符來看待! 有了這個占位字符,其實比沒有要方便,方便上傳服務器,方便從服務器獲取數據,方便與其他平台共通數據; 如果沒有,還要自己記錄圖片的位置,這時候如果有修改,就要更新所有圖片的位置,很麻煩。。。 4,NSTextAttachment要設置bounds屬性,否則圖片會按圖片自己的尺寸顯示,如果圖片太大就會顯示不全 這裡可以把圖片裁一下顯示,上傳圖片的時候,根據需求上傳原圖或者裁剪過的圖片就行,可以讓UI更流暢 5,可以用 string enumerateAttribute:NSAttachmentAttributeNameinRange:NSMakeRange(0, string.length) options:0usingBlock: 這個方法來確定最後的attributedString最終包含的圖片,比每次插入圖片的時候記錄位置要方便的多~ 6,知乎是在插入圖片的時候就把圖片上傳到服務器了,所以把用戶打字的這段時間也利用起來了,不用最後點發布的時候再讓用戶等圖片上傳,雖然有時候可能會多浪費點流量(用戶刪圖片的時候),但是我感覺為了提升的用戶體驗這是值得的~ 7,如果從服務器取數據的話,顯示的時候其實不能用同樣的方式顯示,因為圖片肯定是需要異步加載的,所以這時候還是要用常規的方法來做,就是一堆文字和圖片的顯示;可以直接用label和imageView排列組合,也可以用一個tableView來顯示 8,textView和textField有一個 inputAccessoryView屬性,是自動跟著鍵盤動的,如果不是需要一直顯示的輸入框,用這個屬性要比監聽鍵盤通知要方便很多~ 9,圖片的占位字符“\U0000fffc”其實是有Attributes樣式的,所以有時候刪除了圖片後的字符,再輸入的時候,新的顯示可能就是默認的Attributes樣式了,所以比較保險的做法是給占位字符也add正文的Attributes樣式,不知道有沒有更好的辦法~ 暫時就這些,等想到再補充~ 有什麼問題,歡迎討論~
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved