用NSAttributedString實現簡單的圖文混排,textkit實現圖文混排

來源:互聯網
上載者:User

用NSAttributedString實現簡單的圖文混排,textkit實現圖文混排

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樣式,不知道有沒有更好的辦法~ 暫時就這些,等想到再補充~有什麼問題,歡迎討論~  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.