首页 > 解决方案 > 未在自定义 UIButton 上设置图像

问题描述

所以我试图在我的应用程序中创建一个包含用户图像的圆形导航栏按钮。我走的是子类化 UIButton 并创建自己的自定义类的路线。

一切都很好,除了我尝试抓取图像的部分。我使用 alamofire 根据从 firebase 获得的 URL 获取图像,但是按钮是蓝色的?没有图像

我在我的代码中做错了什么吗

import UIKit
import Firebase
import AlamofireImage
import Alamofire

class CircularNavButton: UIButton {
    var userHandle: DatabaseHandle = 0
    var userRef: DatabaseReference?


    override init(frame: CGRect) {
        super.init(frame: frame)
        setupView()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    @objc func setupView(){
        observeUser()
    }


    @objc func observeUser(){
        self.userHandle = UserService.observeProfile(for: User.current, completion: { (userRef, user, nil) in
            self.userRef = userRef
            guard let userProfilePic = user?.profilePic else{
                return
            }
            Alamofire.request(userProfilePic).responseImage { response in
                debugPrint(response)
                if let image = response.result.value {
                    self.setImage(image, for: .normal)
                    print("image downloaded: \(image)")
                }
            }
        })
    }

    deinit {
        userRef?.removeObserver(withHandle: userHandle)

    }

}

下面是我将它添加到导航栏时的初始化

 @objc func setupCircularNavButton(){
    let image = #imageLiteral(resourceName: "sports").withRenderingMode(.alwaysOriginal)

    let customView = CircularNavButton(type: .system)
    customView.addTarget(self, action: #selector(showMenu), for: .touchUpInside)
    customView.imageView?.contentMode = .scaleToFill

    customView.layer.cornerRadius = 15
    customView.clipsToBounds = true

    customView.widthAnchor.constraint(equalToConstant: 30).isActive = true
    customView.heightAnchor.constraint(equalToConstant: 30).isActive = true

    let barButtonItem = UIBarButtonItem(customView: customView)
    navigationItem.rightBarButtonItems?.insert(barButtonItem, at: 0)
}

标签: iosswift

解决方案


因此,当我像这样初始化它时,我可以通过将按钮类型设置为自定义来解决这个问题

    let customView = CircularNavButton(type: .custom)

推荐阅读