Загрузите изображение в основной пакет в interfaceBuilder из компонента framework. Функция prepareForInterfacebBuilder - PullRequest
0 голосов
/ 12 февраля 2020

Я разрабатываю cocoapod, который имеет подкласс UIButton. Этот подкласс имеет дополнительный imageView. Я хотел бы иметь возможность разрешить пользователям вводить текстовую строку имени изображения в построителе интерфейса (IB), а затем отображать это изображение в imageView в IB.

Если вы построили кокосопод + Пример приложения, прежде чем вы узнаете, что в вашем проекте есть группа Development Pods. Здесь живет класс CustomButton. То, чего я могу достичь, это загрузить изображение, содержащееся в кокопод. Проблема возникает, когда в Sample App я пытаюсь установить имя изображения актива изображения, которое содержится в комплекте Sample App. Класс CustomButton 'prepareForInterfaceBuilder, по-видимому, не может найти изображение, даже если я указываю, что оно должно выглядеть в Bundle.main.

Кажется, проблема в связи между двумя пакетами. Тем не менее, это только верно для IB. Когда я собираю и запускаю приложение, имя образа берется из IB и правильно отображает изображение на устройстве.

Кто-нибудь сталкивался с этим? Нашли решение?

Соответствующий код

    // CustomButton.swift

    ...

    private lazy var buttonImageView: UIImageView = {
        let imageView = UIImageView(frame: .zero)
        imageView.translatesAutoresizingMaskIntoConstraints = false
        if let titleLabel = self.titleLabel {
            self.insertSubview(imageView, belowSubview: titleLabel)
        }
        return imageView
    }()

    @IBInspectable var _image: String = "" {
        didSet {
            if let image = UIImage(named: _image, in: Bundle.main, compatibleWith: nil) {
                self.buttonImageView.image = image
            }
        }
    }

    ...

    override public func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()

        // Added this to ensure it didn't have something to do with the didSet of the var.
        if let image = UIImage(named: _image, in: Bundle.main, compatibleWith: traitCollection) {
            self.buttonImageView.image = image
        }
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...