Не удалось отрендерить и обновить пользовательский 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.

Однако, если я собираю и запускаю, все отображается нормально.

Мне нужно найти способ показать материал на раскадровке, у кого-нибудь есть идеи, как достичь моей цели?

Спасибо

0 ответов

Другие вопросы по тегам