使用 segues 将 Parse 数组中的图像快速链接到 secondViewController

Posted

技术标签:

【中文标题】使用 segues 将 Parse 数组中的图像快速链接到 secondViewController【英文标题】:Swift link Image from Parse array using segues to secondViewController 【发布时间】:2015-11-06 08:09:47 【问题描述】:

这是我的代码,我正在尝试使用“prepareForSegue”函数将图像从 tableViewController (firstViewController) 发送到我的 detailViewController (secondViewController)。我已经成功地从解析云中填充了我的 firstViewController,并且我已经设法让我的 secondViewController 标签更新,但我无法让 imageView 更新。我已经在下面发布了我的代码

firstViewController

    override func prepareForSegue(segue: UIStoryboardSegue, sender:      AnyObject?) 

    let eventDetailVC: EventDetailsVC = segue.destinationViewController as!  EventDetailsVC
    if let selectedArrayIndex = tableView.indexPathForSelectedRow?.row 

        eventDetailVC.detailNameLabel = postedEvents[selectedArrayIndex]
        eventDetailVC.detailAddressLabel = postedAddress[selectedArrayIndex]
        eventDetailVC.detailCityLabel = postedCity[selectedArrayIndex]
        eventDetailVC.detailStateLabel = postedState[selectedArrayIndex]
        eventDetailVC.detailStartLabel = postedStart[selectedArrayIndex]
        eventDetailVC.detailEndLabel = postedEnd[selectedArrayIndex]
        eventDetailVC.detailPriceLabel = postedPrices[selectedArrayIndex]
        eventDetailVC.detailDescriptionLabel =    postedDescription[selectedArrayIndex]

        // The error is here....i think
        eventDetailVC.detailImageView.image = image

    

secondViewController

   var detailNameLabel = String()
   var detailDescriptionLabel = String()
   var detailPriceLabel = String()
   var detailStartLabel = String()
   var detailEndLabel = String()
   var detailAddressLabel = String()
   var detailCityLabel = String()
   var detailStateLabel = String()
   var detailImageView = UIImage()

   override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view.

    detailName.text = detailNameLabel
    detailDescription.text = detailDescriptionLabel
    detailPrice.text = detailPriceLabel
    detailStart.text = detailStartLabel
    detailEnd.text = detailEndLabel
    detailAddress.text = detailAddressLabel
    detailCity.text = detailCityLabel
    detailState.text = detailStateLabel

    // its this line below....i think
    detailImage.image = detailImageView
    

请有人帮我解决这个问题,我对这件事有点陌生

【问题讨论】:

【参考方案1】:

她的存档代码我想你想看...

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    let myCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! EventsCell

    postedImages[indexPath.row].getDataInBackgroundWithBlock  (data, error) -> Void in

        if let downloadedImage = UIImage(data: data!) 

            myCell.postedEventImage.image = downloadedImage
        
    
    myCell.eventName.text = postedEvents[indexPath.row]
    myCell.eventStart.text = postedStart[indexPath.row]
    myCell.eventPrice.text = postedPrices[indexPath.row]

    return myCell

还有关于我如何附加到我的 postImages 数组的代码

     if let objects = objects 
                for object in objects 

                    self.postedImages.append(object.objectForKey("Image") as! PFFile)

                    self.tableView.reloadData()
                

【讨论】:

【参考方案2】:

看起来您应该在 secondViewController 中定义 UIImageView 而不是 UIImage。您的detailImageView 需要是UIImageView 类型。你写的方式是UIImage

在secondViewController中,替换

var detailImageView = UIImage()

var detailImageView = UIImageView()

然后改变:

// its this line below....i think
detailImage.image = detailImageView

// its this line below....i think
detailImage.image = detailImageView.image

要处理从表格视图单元格发送到第二个视图控制器的图像,需要从选定的单元格中抓取图像。这在您的 prepareForSegue 中看起来像这样:

if let myIndexPath = tableView.indexPathForSelectedRow? 
    let cell = self.tableView.cellForRowAtIndexPath(myIndexPath)
    eventDetailVC.detailImageView.image = cell.postedEventImage.image 


您在 secondViewController 中的 viewDidLoad 中的其他分配也有点不寻常。您似乎是根据您命名它们的方式从 UILabels 中分配文本值。如果变量是 UILabel,则将其命名为 somethingLabel 是合适的。但是,如果类型是字符串,它们基于您的变量分配,那么将其命名为 somethingLabel 可能会造成混淆。

【讨论】:

我仍然收到错误,我发布了 firstviewController 的新代码 图像是否已经出现在您的表格视图中?如果是这样,您应该从表格视图单元格中获取图像而不是再次从服务器中获取图像。 为什么不将图像保存在postImages 数组中,就像保存其余数据一样?由于内存使用情况,您可能不想这样做。在prepareForSegue下载图片的问题是它是后台操作,图片不是立即可用的。 是的,图像出现在我的表格视图控制器中。我如何从单元而不是服务器中获取它?我的 postImages 数组是 PFFile 类型的。代码会是什么样子? 我在prepareForSegue 中添加了一种从表格视图单元格中检索图像的方法。由于您说图像已经加载,您应该能够将其传输到您的详细视图。 不幸的是那没有用,我很困惑,我尝试了很多东西,但似乎无法让它发挥作用。最后有什么建议吗?

以上是关于使用 segues 将 Parse 数组中的图像快速链接到 secondViewController的主要内容,如果未能解决你的问题,请参考以下文章

通过 Collection View Cell Swift 中的 segue 将图像传递给另一个视图控制器

使用 Swift 3 上传和图像到 Parse Server 失败:“JSON 文本不是以数组或对象开头”

使用 Parse 将缩略图图像加载到表格单元格中的问题

使用 Parse.com 的多个 Segue 故事板和 TableViewCell

图像捕获,保存文件... Android / Parse

快速通过segue传递数组