UITextKit 和 exclusionPaths:编辑时不可靠的缩进
UITextKit and exclusionPaths: undependable indent when editing
我在使用 exclusionPaths 的 UITextKit 中遇到问题:当我将图像放入我正在编辑的 TextView 中时,首先一切看起来都很好:
但是当“完成”按钮被点击时,它看起来像这样,标识是错误的:
这是class用来存储图片信息的
class ImageClass {
var image: UIImage!
var imageView: UIImageView
var imageName: String!
var active:Bool
var exclusivePath: UIBezierPath!
init(image: UIImage!, imageName: String!) {
self.image = image
imageView = UIImageView(image: image!)
self.imageName = imageName
self.active = false
self.exclusivePath = nil
}
}
用户在选择图像时在触发委托的 UICollectionView 中选择图像。 (imageViewObjects是一个数组,我可以放ImageClass的对象,所以我可以使用多个图像)
// MARK: - SelectImageDelegate
func selectedImage(name:String) {
let image = UIImage(named: name)
let imageViewObject = ImageClass(image: image, imageName: name)
self.imageViewObjects.append(imageViewObject)
imageViewObject.imageView.frame = CGRectMake(4, 7, width!, height!)
// define the exlusionPaths
let bezierPath = self.exclusionPathForImageView(imageViewObject.imageView)
imageViewObject.exclusivePath = bezierPath
self.updateExclusionPaths()
self.textView.addSubview(imageViewObject.imageView)
}
// set UIBezierPath for the UIImageView
func exclusionPathForImageView(imageView: UIImageView) -> UIBezierPath {
let bezierPath = UIBezierPath(rect:
CGRectMake(imageView.frame.origin.x, imageView.frame.origin.y,
imageView.frame.width, imageView.frame.height))
return bezierPath
}
func updateExclusionPaths() {
textView.textContainer.exclusionPaths = []
for imageViewObject in self.imageViewObjects {
textView.textContainer.exclusionPaths.append(imageViewObject.exclusivePath)
}
}
bezierPath上下文没问题。
点击“完成”后,我停止编辑
let doneBarButton = UIBarButtonItem(title: "Done", style: .Done, target: view, action: Selector("endEditing:"))
现在我在 textViewDidEndEditing() 中什么都不做。
我还尝试使用 UIButton 作为图像。类似的结果。
有什么解决方法吗?请帮助我!!!!
找到解决方法:
func textViewShouldEndEditing(textView: UITextView) -> Bool {
textView.editable = false
}
我不得不添加设置 textView.editable = true,即在 viewDidLoad()
let tapGesture = UITapGestureRecognizer(target: self, action: "resetEditable")
tapGesture.numberOfTapsRequired = 1
self.textView.addGestureRecognizer(tapGesture)
func resetEditable() {
textView.editable = true
textView.becomeFirstResponder()
}
我在使用 exclusionPaths 的 UITextKit 中遇到问题:当我将图像放入我正在编辑的 TextView 中时,首先一切看起来都很好:
但是当“完成”按钮被点击时,它看起来像这样,标识是错误的:
这是class用来存储图片信息的
class ImageClass {
var image: UIImage!
var imageView: UIImageView
var imageName: String!
var active:Bool
var exclusivePath: UIBezierPath!
init(image: UIImage!, imageName: String!) {
self.image = image
imageView = UIImageView(image: image!)
self.imageName = imageName
self.active = false
self.exclusivePath = nil
}
}
用户在选择图像时在触发委托的 UICollectionView 中选择图像。 (imageViewObjects是一个数组,我可以放ImageClass的对象,所以我可以使用多个图像)
// MARK: - SelectImageDelegate
func selectedImage(name:String) {
let image = UIImage(named: name)
let imageViewObject = ImageClass(image: image, imageName: name)
self.imageViewObjects.append(imageViewObject)
imageViewObject.imageView.frame = CGRectMake(4, 7, width!, height!)
// define the exlusionPaths
let bezierPath = self.exclusionPathForImageView(imageViewObject.imageView)
imageViewObject.exclusivePath = bezierPath
self.updateExclusionPaths()
self.textView.addSubview(imageViewObject.imageView)
}
// set UIBezierPath for the UIImageView
func exclusionPathForImageView(imageView: UIImageView) -> UIBezierPath {
let bezierPath = UIBezierPath(rect:
CGRectMake(imageView.frame.origin.x, imageView.frame.origin.y,
imageView.frame.width, imageView.frame.height))
return bezierPath
}
func updateExclusionPaths() {
textView.textContainer.exclusionPaths = []
for imageViewObject in self.imageViewObjects {
textView.textContainer.exclusionPaths.append(imageViewObject.exclusivePath)
}
}
bezierPath上下文没问题。
点击“完成”后,我停止编辑
let doneBarButton = UIBarButtonItem(title: "Done", style: .Done, target: view, action: Selector("endEditing:"))
现在我在 textViewDidEndEditing() 中什么都不做。
我还尝试使用 UIButton 作为图像。类似的结果。
有什么解决方法吗?请帮助我!!!!
找到解决方法:
func textViewShouldEndEditing(textView: UITextView) -> Bool {
textView.editable = false
}
我不得不添加设置 textView.editable = true,即在 viewDidLoad()
let tapGesture = UITapGestureRecognizer(target: self, action: "resetEditable")
tapGesture.numberOfTapsRequired = 1
self.textView.addGestureRecognizer(tapGesture)
func resetEditable() {
textView.editable = true
textView.becomeFirstResponder()
}