Не удалось отрендерить и обновить пользовательский UITextField
Мне нужно предоставить подкласс UITextField
которые предлагают возможность установить leftImage из раскадровки. Для этого я подумал о @IBDesignable
а также @IBInspectable
и создать этот следующий подкласс
import Foundation
import UIKit
@IBDesignable
class DesignableUITextField: UITextField {
var leftPadding: CGFloat = 10
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
override func leftViewRect(forBounds bounds: CGRect) -> CGRect {
var textRect = super.leftViewRect(forBounds: bounds)
textRect.origin.x += leftPadding
return textRect
}
override init(frame: CGRect){
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
@IBInspectable var iconFromURLString: String! {
didSet {
updateView()
}
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
updateView()
}
func updateView(){
if let url = URL(string:iconFromURLString) {
DispatchQueue.global().async {
if let data = try? Data(contentsOf: url) {
DispatchQueue.main.async {
if let image:UIImage = UIImage(data: data) {
self.leftViewMode = UITextFieldViewMode.always
self.imageView.contentMode = .scaleAspectFit
self.imageView.image = image
self.leftView = self.imageView
}
}
}
}
}
}
}
Когда я создаю некоторые DesignableUITextField
Я могу установить UIImageVIew
от настройки iconFromURLString
из атрибута инспектора. Проблема в том, что sotryboard больше не будет отображать содержимое контроллера просмотра, что приведет к пустым пустым страницам. Вот сообщение об ошибке:
error: IB Designables: Failed to render and update auto layout status for UIViewController (xxxxx): The agent threw an exception.
Однако, если я собираю и запускаю, все отображается нормально.
Мне нужно найти способ показать материал на раскадровке, у кого-нибудь есть идеи, как достичь моей цели?
Спасибо