Вот что я сделал, когда получил изображение из didFinishPickingMediaWithInfo. Получил URL-адрес изображения
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
picker.dismiss(animated: true)
//1 Make a NSAttachmentVariable
let attachment = NSTextAttachment()
guard let image = info[.editedImage] as? UIImage else {
print("No image found")
return
}
//2 get the ImageURL
guard let imageURL = info[.imageURL] as? URL else {
print("No url")
return
}
//3 optional Resize the image
let resizedImage = self.resizeImage(image: image, targetSize: CGSize(width: txtView.frame.size.width, height: 200))
//4 add the fetched image to the attachment created earlier to display on text view
attachment.image = resizedImage
//5 insert the attachment to the textview
let attString = NSMutableAttributedString(attachment: attachment)
txtView.textStorage.insert(attString, at: txtView.selectedRange.location)
//6 get the range of the whole image from the textview string
let range = NSString(string: attString.string).range(of: attString.string, options: String.CompareOptions.caseInsensitive)
//7 add the fetched image url we got earlier at //2 to the attachment
attString.addAttribute(.link, value: imageURL, range: range)
//8 add the attributed text to the text view
txtView.attributedText = attString
}
. Теперь используйте shouldInteractWith из textview, чтобы открыть изображение из URL, не забудьте добавить UITextViewDelegate как расширение вашего контроллера
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "Details") as! DetailsImage
let data = try? Data(contentsOf: URL)
if let imageData = data {
newViewController.image = UIImage(data: imageData)!
}
self.present(newViewController, animated: true, completion: nil)
//UIApplication.shared.open(URL)
return false
}
Это используется для открытия URL-адресов из вашего текстового представления, теперь мы используем полученный URL-адрес, меняем его на данные и устанавливаем переменную изображения из другого контроллера представления для возвращаемых данных
Вот другой viewController
import UIKit
class DetailsImage: UIViewController{
var image = UIImage()
@IBOutlet weak var imgView: UIImageView!
override func viewDidLoad() {
imgView.image = image
}
}
ВАЖНО Примечание:
Отвод не может быть очень коротким, что означает, что быстрые нажатия игнорируются iOS. Если вас это раздражает, вы можете рассмотреть что-то вроде этого: https://gist.github.com/benjaminbojko/c92ac19fe4db3302bd28.
Вот и все. Вы можете установить навигационную кнопку на недавно открытом V C на go обратно к v c из textView