我创建了一个左侧导航栏按钮,但我不知道如何将 url 中的图像存储到按钮图像中。下面是我的导航栏左按钮代码
navigationItem.leftBarButtonItem = UIBarButtonItem(image: <#T##UIImage?#>, style: .plain, target: self, action: #selector(handleButtonPressed))
我应该创建一个 UIimage 变量,然后将其用于图像参数吗?有什么建议吗?谢谢!
您需要先下载映像。因此,在下载时,您要么设置占位符图像,要么根本不显示它。但是这段代码应该对您有所帮助。
fund viewDidLoad() {
super.viewDidLoad()
let placeholderImage = UIImage(named: "placeholder")
updateLeftNavigationItem(with: placeholderImage)
loadNavigationBarImage(from: URL(string: "<your url>")!)
}
func updateLeftNavigationItem(with image: UIImage?) {
navigationItem.leftBarButtonItem = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(handleButtonPressed))
}
func loadNavigationBarImage(from url: URL) {
getDataFromUrl(url: url) { data, response, error in
guard let data = data, error == nil else { return }
DispatchQueue.main.async() { [weak self] in
let image = UIImage(data: data)
self?.updateLeftNavigationItem(with: image)
}
}
}
func getDataFromUrl(url: URL, completion: @escaping (Data?, URLResponse?, Error?) -> ()) {
URLSession.shared.dataTask(with: url) { data, response, error in
completion(data, response, error)
}.resume()
}
对于初始状态
您可以将图像从 url 设置为栏按钮,如下所示:首先将 url 转换为数据,然后转换为 UIImage,然后使用它
let url = URL(string:"http://www.apple.com/euro/ios/ios8/a/generic/images/og.png")
if let data = try? Data(contentsOf: url!)
{
let Serverimage: UIImage = UIImage(data: data)
let barButton = UIBarButtonItem(image: Serverimage, landscapeImagePhone: nil, style: .Done, target: self, action: #selector(handleButtonPressed))
self.navigationItem.leftBarButtonItem = barButton
}
万事如意。希望这对您有所帮助。