Как показать изображение на пользовательском кнопочном элементе управления в дизайнере - PullRequest
0 голосов
/ 13 марта 2019

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

@IBDesignable class UCButtonNext: UIButton {
    // setup programatically
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupButton()
    }

    // setup via Storyboard
    required init?(coder aDecoder: NSCoder) {
        //fatalError("init(coder:) has not been implemented")
        super.init(coder: aDecoder)
        setupButton()
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        setupButton()
    }

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        setupButton()
    }

    func setupButton() {
        setupButtonStyle()
        setupShadow()
    }

    func setupButtonStyle() {
        setTitleColor(.white, for: .normal)

        backgroundColor         = UIColor.clear
        titleLabel?.font        = UIFont(name: "Courier", size: 18)
        setTitleColor(UIColor.black, for: .normal)

        layer.cornerRadius      = frame.height / 2
        layer.borderWidth       = 1.0
        layer.borderColor       = UIColor.white.cgColor

        setImage(UIImage(named: "btnArrowRight"), for: .normal)
    }

Моя кнопка отображается в дизайнере, но, похоже, изображение не отображается.

enter image description here

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Ответ, на который Алекс указал вам - https://stackoverflow.com/a/40359161/10657724 - должен быть тем, что вам нужно.

Чтобы помочь вам отладить проблему, измените эту строку:

setImage(UIImage(named: "btnArrowRight"), for: .normal)

до:

    // DYNAMIC BUNDLE DEFINITION FOR DESIGNABLE CLASS
    let dynamicBundle = Bundle(for: type(of: self))

    // AND THEN SUCCESSFULLY YOU CAN LOAD THE RESSOURCE
    if let image = UIImage(named: "btnArrowRight", in: dynamicBundle, compatibleWith: nil) {
        setImage(image, for: .normal)
        setTitle("Works!", for: .normal)
    } else {
        setTitle("Failed!", for: .normal)
    }

Это установит название вашей кнопки на «Работает!» или "Не удалось!"

Если вы видите "Работает!" Вы также должны увидеть свое изображение.

В противном случае у вас что-то не так с вашим ресурсом изображения.

0 голосов
/ 13 марта 2019

Может помочь ответ на этот вопрос:

https://stackoverflow.com/a/40359161/10657724

При создании образа необходимо динамически указывать комплект, так как основной комплект недоступен во время разработки.

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