Swift 4 个带 UITableView 单元格的 AlamofireImage
Swift 4 AlamofireImage with UITableView Cell
我正在使用 AlamofireImages 尝试从服务器下载图像并将其显示在我的 table 视图单元格中,这就是我得到的,但我的图像没有出现,只有 textLabel 和 detailTextLabel
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "trendingCell", for: indexPath)
print(self.array[indexPath.row])
cell.textLabel?.text = (self.array[indexPath.row]["title"] as! String)
cell.detailTextLabel?.text = (self.array[indexPath.row]["username"] as! String)
Alamofire.request("http://xxxxxxx.com/uploads/" + (self.array[indexPath.row]["cover"] as! String)).responseImage { response in
if let image = response.result.value {
cell.imageView?.image = image
}
}
return cell
}
这对我有帮助:
先创建这个函数来帮助下拉镜像。如果您要拉取多个图像,您可能需要创建一个新的 swift 文件并将其设为静态,或者只是在您需要的文件中调用它。这样你就可以参考它而不是重新编写代码:
static func loadImage(_ imageView: UIImageView,_ urlString: String) {
let imgURL: URL = URL(string: urlString)!
URLSession.shared.dataTask(with: imgURL) { (data, respond, error) in
guard let data = data, error == nil else { return}
DispatchQueue.main.async (execute: {
imageView.image = UIImage(data: data)
})
}.resume()
}
然后下拉信息:
if let logoName = variable.logo {
StaticFileName.loadImage(cell.imgVariableInCell, "\(logoName)")
}
return cell
}
那你就可以开始了。
你需要在主线程中运行这段代码。
DispatchQueue.main.async {
cell.imageView?.image = image
}
试试这个:
Alamofire.request(imageUrl!, method: .get).response { response in
guard let image = UIImage(data:response.data!) else {
// Handle error
return
}
let imageData = UIImageJPEGRepresentation(image,1.0)
cell.myImage.image = UIImage(data : imageData!)
}
这对我来说很好..
希望这会有所帮助。
你可以使用 SDWebImage
首先你需要导入这个
import SDWebImage
那你可以用这个方法
let imgUrl = URL(string:"your image URL string")
cell.imageView?.sd_setImage(with: imgUrl, placeholderImage: UIImage(named: "propic"))
使用 AlamofireImages
if let url = URL(string: "your url") {
cell.imageView?.af_setImage(withURL:url, placeholderImage: nil, filter: nil, imageTransition: .crossDissolve(0.2), runImageTransitionIfCached: false, completion: {response in
// do stuff when is downloaded completely.
})
}
当然不会显示您的图像。因为当 Alamofire 开始下载您的图像时,它会在后台线程中进行处理。但是您正在主线程或 UI 线程中工作,因此您需要从后台切换到主线程,这对您有用。
Alamofire.request("http://xxxxxxx.com/uploads/" + (self.array[indexPath.row]["cover"] as! String)).responseImage { response in
DispatchQueue.main.async {
if let image = response.result.value {
cell.imageView?.image = image
}
}
}
如果您认为这样做有困难,我建议您使用这个名为 Kingfisher 的库,它将为您处理异步加载图像,使您的单元格 table 运行 顺利进行。
您的代码是正确的。
我认为传输安全性通过 http 阻止了您的图像。
将其添加到您的 info.plist 文件
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key> //put your domain name here
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
你也可以使用alamofire的图片库。只需添加 pod alamofireImage。
首先你必须检查,如果你得到了正确的反应,你是否得到了正确的反应而不是像这样写代码
Alamofire.request(imageUrl!, method: .get).response { response in
if let image = UIImage(data: response.data!) {
cell. imageView?.image = image
}
}
您应该将 link 作为变量传递给单元格中的变量,并覆盖 UITableViewCell 中的 awakefromnib 函数。在 awakeFrom nib 中,你调用 alamofire 请求将图像加载到单元格中,这样你就不会在每次重用单元格时都调用查询。
所以
//单元格代码
import Alamofire
...
var imageLink:String?
override func awakeFromNib() {
super.awakeFromNib()
Alamofire.request(imageLink).responseImage { response in
if let image = response.result.value {
self.imageView?.image = image
}
}
}
//cell configuration
cell.imageLink = "http://xxxxxxx.com/uploads/" + self.array[indexPath.row]["cover"] as! String)
Swift-5 完美运行的支持代码
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tblView.dequeueReusableCell(withIdentifier: "cell") as! TableViewCell
cell.lblName.text = arrData[indexPath.row]["name"] as? String
let imageUrl = arrData[indexPath.row]["imageUrl"] as? String
Alamofire.request(imageUrl!, method: .get).response { response in
guard let image = UIImage(data:response.data!) else {
// Handle error
return
}
let imageData = image.jpegData(compressionQuality: 1.0)
cell.imgCourses.image = UIImage(data : imageData!)
}
return cell
}
我正在使用 AlamofireImages 尝试从服务器下载图像并将其显示在我的 table 视图单元格中,这就是我得到的,但我的图像没有出现,只有 textLabel 和 detailTextLabel
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "trendingCell", for: indexPath)
print(self.array[indexPath.row])
cell.textLabel?.text = (self.array[indexPath.row]["title"] as! String)
cell.detailTextLabel?.text = (self.array[indexPath.row]["username"] as! String)
Alamofire.request("http://xxxxxxx.com/uploads/" + (self.array[indexPath.row]["cover"] as! String)).responseImage { response in
if let image = response.result.value {
cell.imageView?.image = image
}
}
return cell
}
这对我有帮助:
先创建这个函数来帮助下拉镜像。如果您要拉取多个图像,您可能需要创建一个新的 swift 文件并将其设为静态,或者只是在您需要的文件中调用它。这样你就可以参考它而不是重新编写代码:
static func loadImage(_ imageView: UIImageView,_ urlString: String) {
let imgURL: URL = URL(string: urlString)!
URLSession.shared.dataTask(with: imgURL) { (data, respond, error) in
guard let data = data, error == nil else { return}
DispatchQueue.main.async (execute: {
imageView.image = UIImage(data: data)
})
}.resume()
}
然后下拉信息:
if let logoName = variable.logo {
StaticFileName.loadImage(cell.imgVariableInCell, "\(logoName)")
}
return cell
}
那你就可以开始了。
你需要在主线程中运行这段代码。
DispatchQueue.main.async {
cell.imageView?.image = image
}
试试这个:
Alamofire.request(imageUrl!, method: .get).response { response in
guard let image = UIImage(data:response.data!) else {
// Handle error
return
}
let imageData = UIImageJPEGRepresentation(image,1.0)
cell.myImage.image = UIImage(data : imageData!)
}
这对我来说很好.. 希望这会有所帮助。
你可以使用 SDWebImage
首先你需要导入这个
import SDWebImage
那你可以用这个方法
let imgUrl = URL(string:"your image URL string")
cell.imageView?.sd_setImage(with: imgUrl, placeholderImage: UIImage(named: "propic"))
使用 AlamofireImages
if let url = URL(string: "your url") {
cell.imageView?.af_setImage(withURL:url, placeholderImage: nil, filter: nil, imageTransition: .crossDissolve(0.2), runImageTransitionIfCached: false, completion: {response in
// do stuff when is downloaded completely.
})
}
当然不会显示您的图像。因为当 Alamofire 开始下载您的图像时,它会在后台线程中进行处理。但是您正在主线程或 UI 线程中工作,因此您需要从后台切换到主线程,这对您有用。
Alamofire.request("http://xxxxxxx.com/uploads/" + (self.array[indexPath.row]["cover"] as! String)).responseImage { response in
DispatchQueue.main.async {
if let image = response.result.value {
cell.imageView?.image = image
}
}
}
如果您认为这样做有困难,我建议您使用这个名为 Kingfisher 的库,它将为您处理异步加载图像,使您的单元格 table 运行 顺利进行。
您的代码是正确的。 我认为传输安全性通过 http 阻止了您的图像。 将其添加到您的 info.plist 文件
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key> //put your domain name here
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
你也可以使用alamofire的图片库。只需添加 pod alamofireImage。
首先你必须检查,如果你得到了正确的反应,你是否得到了正确的反应而不是像这样写代码
Alamofire.request(imageUrl!, method: .get).response { response in
if let image = UIImage(data: response.data!) {
cell. imageView?.image = image
}
}
您应该将 link 作为变量传递给单元格中的变量,并覆盖 UITableViewCell 中的 awakefromnib 函数。在 awakeFrom nib 中,你调用 alamofire 请求将图像加载到单元格中,这样你就不会在每次重用单元格时都调用查询。
所以
//单元格代码
import Alamofire
...
var imageLink:String?
override func awakeFromNib() {
super.awakeFromNib()
Alamofire.request(imageLink).responseImage { response in
if let image = response.result.value {
self.imageView?.image = image
}
}
}
//cell configuration
cell.imageLink = "http://xxxxxxx.com/uploads/" + self.array[indexPath.row]["cover"] as! String)
Swift-5 完美运行的支持代码
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tblView.dequeueReusableCell(withIdentifier: "cell") as! TableViewCell
cell.lblName.text = arrData[indexPath.row]["name"] as? String
let imageUrl = arrData[indexPath.row]["imageUrl"] as? String
Alamofire.request(imageUrl!, method: .get).response { response in
guard let image = UIImage(data:response.data!) else {
// Handle error
return
}
let imageData = image.jpegData(compressionQuality: 1.0)
cell.imgCourses.image = UIImage(data : imageData!)
}
return cell
}