【困っていること】
カーソルの位置に画像をはりつけたいが、textviewの一番最後にはりついてしまう。
【試したこと】
https://riptutorial.com/ja/ios/example/13625/%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB-%E3%83%9D%E3%82%B8%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%8F%96%E5%BE%97%E3%81%A8%E8%A8%AD%E5%AE%9A
ここを参考にして試行錯誤してみたのですが扱っているのがtextではなくattributedtextのため意図通りに動かすことは出来ませんでした。
【コード】
swift
1 2import UIKit 3 4class testViewController: UIViewController,UIImagePickerControllerDelegate,UITextFieldDelegate, UINavigationControllerDelegate { 5 6 7 @IBOutlet weak var shousaiTextView: UITextView! 8 override func viewDidLoad() { 9 super.viewDidLoad() 10 } 11 12 //MARK:-画像を貼るボタン 13 var picker: UIImagePickerController! = UIImagePickerController() 14 @IBAction func gazou(_ sender: Any) { 15 //PhotoLibraryから画像を選択 16 picker.sourceType = UIImagePickerController.SourceType.photoLibrary 17 //デリゲートを設定する 18 picker.delegate = self 19 //現れるピッカーNavigationBarの文字色を設定する 20 picker.navigationBar.tintColor = UIColor.white 21 //現れるピッカーNavigationBarの背景色を設定する 22 picker.navigationBar.barTintColor = UIColor.gray 23 //ピッカーを表示する 24 present(picker, animated: true, completion: nil) 25 } 26 //MARK:-メモに画像を貼り付ける処理 27 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { 28 if let image = info[.originalImage] as? UIImage { 29 30 let fullString = NSMutableAttributedString(string: shousaiTextView.text) 31 32 let imageWidth = image.size.width 33 // 画像の幅を調整したい場合paddingなどをframeから引く 34 let padding: CGFloat = 16 35 let scaleFactor = imageWidth / (shousaiTextView.frame.size.width - padding) 36 let imageAttachment = NSTextAttachment() 37 imageAttachment.image = UIImage(cgImage: image.cgImage!, scale: scaleFactor, orientation: .up) 38 let imageString = NSAttributedString(attachment: imageAttachment) 39 fullString.append(imageString) 40 // TextViewに画像を含んだテキストをセット 41 shousaiTextView.attributedText = fullString 42 } 43 dismiss(animated: true, completion: nil) 44 } 45} 46 47
【環境】
【Xcode】11.4【macOS】 Catalina 10.15.4【Swift】5.2【iOS】13.3.1
【最後に】
拙い質問で恐縮ですが教えて頂けると嬉しいです。
fullString.append(imageString) したら文字列の最後に追加されます。特定の場所に挿入するには insert(_:at:) メソッドを使う必要があります。
https://developer.apple.com/documentation/foundation/nsmutableattributedstring/1414947-insert
回答1件
あなたの回答
tips
プレビュー