質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1018閲覧

textViewのカーソルの位置に画像を貼り付けたい

Daisuke0315

総合スコア23

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2020/05/13 02:37

【困っていること】
カーソルの位置に画像をはりつけたいが、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

【最後に】
拙い質問で恐縮ですが教えて頂けると嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

デベロッパードキュメントを見落としていました。

swift

1 var カーソルの位置 = 0 2 3//カーソルの位置を取得する 4 if let selectedRange = shousaiTextView.selectedTextRange { 5 カーソルの位置 = shousaiTextView.offset(from: shousaiTextView.beginningOfDocument, to: selectedRange.start) 6 } 7 8 9 let imageString = NSAttributedString(attachment: imageAttachment) 10 //カーソルの位置に画像を貼り付ける 11 fullString.insert(imageString, at: カーソルの位置 ) 12

カーソルの位置を取得してインサートすれば意図した箇所に画像挿入できることがわかりました、ありがとうございました!

投稿2020/05/14 06:44

Daisuke0315

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問