Я разрабатываю 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
}
}