在ios開發中,我們一般都是在textfield或者textView中輸入文字。當我們需要插入圖片的時候其實也是很簡單的
我們需要利用的textfield,textView的屬性化文本,將圖片以附件的形式插入
步驟如下:(以textView為了,oc中也是一樣的)
- 創建附件,同時設置好textView的字體大小(或者在storyBoard中設置)
1 //設置字體 2 textView.font = UIFont.systemFontOfSize(24) 3 //創建附件 4 let attachment = NSTextAttachment()
-
將附件的圖片屬性設置為需要插入的圖片,並將附件轉化為屬性化文本,並設置附件的大小
-
1 //設置附件的照片 2 attachment.image = UIImage(圖片名稱) 3 //設置附件的大小(-4這個數字可以根據實際情況調試,寬高也可以自己設置,這里用字體大小做參照) 4 attachment.bounds = CGRectMake(0, -4, textView.font.lineHeight, textView.font.lineHeight) 5 //將附件轉成NSAttributedString類型的屬性化文本 6 let attStr = NSAttributedString(attachment: attachment)
- 獲取目前textView中的文本,轉成可變的文本,記錄光標的位置,並插入上一步中的屬性化的文本
-
1 //獲取textView的所有文本,轉成可變的文本 2 var mutableStr = NSMutableAttributedString(attributedString: textView.attributedText) 3 //獲得目前光標的位置 4 let selectedRange = textView.selectedRange 5 //插入文字 6 mutableStr.insertAttributedString(attStr, atIndex: selectedRange.location)
- 設置新的可變文本的屬性,並計算新的光標位置
-
1 //設置可變文本的字體屬性 2 mutableStr.addAttribute(NSFontAttributeName, value: UIFont.systemFontOfSize(24), range: NSMakeRange(0,mutableStr.length)) 3 //再次記住新的光標的位置 4 let newSelectedRange = NSMakeRange(selectedRange.location+1, 0)
- 將新文本賦值給textView,並恢復光標的位置
-
1 //重新給文本賦值 2 textView.attributedText = mutableStr 3 //恢復光標的位置(上面一句代碼執行之后,光標會移到最后面) 4 textView.selectedRange = newSelectedRange