【问题标题】:How to push SDWebImage images to a detail view如何将 SDWebImage 图像推送到详细视图
【发布时间】:2016-10-05 08:28:59
【问题描述】:

我正在尝试找出一种方法,将通过 TableView 上的 SDWebImage 加载的图像推送到可以全屏查看图像的视图 (DetailView)。

我已从 URL 加载的图像正确显示在表格视图上。但是当我点击一个时,它会转到另一个视图(DetailView),当我在那里有一个 UIImage 时它是空白的。由于某种原因,图像未加载。

谢谢!

这是 TableView 代码:

import UIKit

class TableViewController: UITableViewController {

var imageURLs = [String]()

override func viewDidLoad() {
    super.viewDidLoad()

    imageURLs = ["https://i.imgur.com/lssFB4s.jpg","https://i.imgur.com/bSfVe7l.jpg","https://i.imgur.com/vRhhNFj.jpg"]


    // Uncomment the following line to preserve selection between presentations
    // self.clearsSelectionOnViewWillAppear = false

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.

}

override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {

    if (segue.identifier == "DetailView")  {

        let VC = segue.destinationViewController as! DetailViewController
        if let indexpath = self.tableView.indexPathForSelectedRow {

            let Imageview = imageURLs[indexpath.row] as String
            VC.SentData1 = Imageview
        }

    }



}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")

    let cell2: TableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! TableViewCell

    let imagename = UIImage(named: imageURLs[indexPath.row])
    cell2.cellImage.image = imagename


    let imageView = cell?.viewWithTag(1) as! UIImageView

    imageView.sd_setImage(with: URL(string: imageURLs[indexPath.row]))

    return cell!


}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return imageURLs.count
}

这里是DetailView的代码:

import UIKit

class DetailViewController: UIViewController {

@IBOutlet weak var Detailimageview: UIImageView!

var SentData1:String!


override func viewDidLoad() {
    super.viewDidLoad()


    Detailimageview.image = UIImage(named: SentData1)


    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/

【问题讨论】:

    标签: ios swift sdwebimage


    【解决方案1】:

    您在目标 VC 中使用 UIImage(named:)。这将尝试从您的捆绑包中加载图像,而不是从网络中加载。您应该使用sd_setImage 从网络中获取它(或者如果它已经被获取,则通过缓存):

     Detailimageview.sd_setImage(with: URL(string:self.SentData1))  
    

    请注意,按照惯例,属性和变量应以小写字母开头

    【讨论】:

    • 感谢您的回复。我收到一条错误消息:“UIImage 类型的值?” has no member 'sd_setImage' 为了清楚起见,我将其粘贴过来: Detailimageview.image = UIImage(named: SentData1) 此错误是否意味着 SDWebImage 尚未“加载”到 DetailViewController 上?谢谢!
    • 抱歉,打错了。固定
    【解决方案2】:

    当您加载详细视图时,您正在传递要加载的图像的 Web URL,然后尝试使用 UIImage(named: SentData1) 从包中加载它。

    相反,您应该像在表格视图单元格中那样加载它,方法是执行类似Detailimageview.sd_setImage(with: URL(string: SentData1)) 的操作

    【讨论】:

    • 感谢您的回复。我收到一条错误消息:“UIImage 类型的值?” has no member 'sd_setImage' 为了清楚起见,我将其粘贴过来: Detailimageview.image = UIImage(named: SentData1) 这是否意味着 SDWebImage 尚未“加载”到 DetailViewController 上?谢谢!
    • 我不明白我给你的代码你会如何得到这个错误。你确定你没有做其他事情吗?
    • Paulw11 在下面用稍微不同的代码行回答: Detailimageview.sd_setImage(with: URL(string:self.SentData1)) 这个似乎有效。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    相关资源
    最近更新 更多