TableView将图像分配给TVC中的单元格
Posted
技术标签:
【中文标题】TableView将图像分配给TVC中的单元格【英文标题】:TableView assigning image to cell in TVC 【发布时间】:2017-03-24 11:17:33 【问题描述】:此代码有问题。基本上,我正在尝试使用从 Twitter 中提取的图像填充表格单元格。这里的 url 字段的值为 http://pbs.twimg.com/profile_images/796924570150301696/35nSG5nN_normal.jpg 但由于某种原因 print("REACHED") 从未打印。任何帮助/建议表示赞赏!
代码sn-p:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: tIdentifier, for: indexPath) as! TweetCell
let tweet = tweets[indexPath.section][indexPath.row]
let url = tweet.user.profileImageURL!
print(url.absoluteString)
let data = try? Data(contentsOf: url)
if (data == nil)
else
print("REACHED")
cell.avatarImage = UIImage(data: data!)
cell.tweet = tweets[indexPath.section][indexPath.row]
return cell
【问题讨论】:
let data = try? Data(contentsOf: url)
避免这种情况!它同步并阻塞了 UI。
@Larme 对替代方法有什么建议吗?
这个库可能有用:github.com/Alamofire/AlamofireImage
【参考方案1】:
这对我有用:
func example()
let cell = UITableViewCell()
let url = URL(string: "http://pbs.twimg.com/profile_images/796924570150301696/35nSG5nN_normal.jpg")
do
let data = try Data(contentsOf: url!)
print("REACHED")
cell.imageView?.image = UIImage(data: data)
catch
print("received this error:\n\(error.localizedDescription)")
如果它不能立即起作用,至少你会收到一条错误消息来帮助你解决问题。祝你好运!
编辑: 您应确保已更新 Info.plist 以包含以下条目:
应用传输安全设置
没有这个,您将无法访问其他网站。 Transport security has blocked a cleartext HTTP
【讨论】:
我没有看到文件的路径。在上面加载文件的方法中添加断点。逐步检查并进行验证。 太棒了!很高兴我能帮上忙! 这最初给了我一个“无法打开文件错误”,这导致我重新检查我的 plist 源代码,并通过添加<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
我能够让它运行。谢谢@Mozahler
有趣的是,这将是我的下一个建议。我正要从我的 Info.plist 中复制和粘贴。我在一个设置了 NSAPPTransportSecurity 的应用程序中快速测试了代码。【参考方案2】:
轻松生活的一些小窍门……
不要强行展开 不要在主队列上下载 不要暴露你手机的IBOutlet
s
let imageQueue = DispatchQueue(label: "imageQueue", qos: DispatchQoS.background)
class TweetCell: UITableViewCell
@IBOutlet fileprivate var avatarImage: UIImageView!
var tweet: Tweet
didSet
guard let url = tweet.user.profileImageURL else return
loadImage(url: url)
fileprivate func loadImage(url: URL)
imageQueue.async
do
let data = try Data(contentsOf: url)
DispatchQueue.main.async
self.avatarImage.image = UIImage(data: data)
catch
// Handle error
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: tIdentifier, for: indexPath) as! TweetCell
cell.tweet = tweets[indexPath.section][indexPath.row]
return cell
【讨论】:
以上是关于TableView将图像分配给TVC中的单元格的主要内容,如果未能解决你的问题,请参考以下文章
swift如何将图像传递给可点击的tableview单元格?
如何将 viewController 中的数据分配给 tableViewCell 标签?
如何通过stackview将图像添加到tableview单元格