将值传递给另一个视图控制器(键值对形式的值)

时间:2017-11-06 11:57:00

标签: ios swift

在我的tableview中,我正在加载tableviewcells&值如此显示在那些单元格上......

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                    let cell: sellTableViewCell = tableView.dequeueReusableCell(withIdentifier: "abc") as! sellTableViewCell

                    let product = arrProduct?[indexPath.section]
                    cell.rateTextField.text = product?.theRate


    //Showing images in imageView using SDWebImage
        cell.prdImgView.sd_setImage(with: arrProduct?[indexPath.section].images[indexPath.row].url, placeholderImage: UIImage(named: "appLogo.jpg"), options: []) { (image, error, imageCacheType, imageUrl) in

        self.appDelegate.commonArrayOfSelectedImages.append(image!)}}

现在,self.appDelegate.commonArrayOfSelectedImages拥有所有图像。这些图像我能够在另一个视图控制器中显示。

但是除了图像之外,我还希望将每个图像的速率(在cell.rateTextField.text中显示)传递到另一个视图,这样我就可以获得我的图像以及与每个图像相关的速率。费率如何与我无法弄清楚的图像一起传递。希望有人能帮忙......

5 个答案:

答案 0 :(得分:0)

创建一个数组,其中ViewController要传递数组值。

绑定UITableViewDelegate

添加UITableViewDelegate的didselect方法

optional public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){


}

假设你的数组是arrAnotherVC而viewcontroller将是AnotherVC。

let anotherVC = AnotherVC!
let product = arrProduct?[indexPath.section]
anotherVC.arrAnotherVC = arrProduct?[indexPath.section]

因此,您可以在AnotherVC中获取您的值。

谢谢!!!

答案 1 :(得分:0)

我相信使用AppDelegate在ViewControllers之间传递数据并不是一个好方法。

如果你想在两个ViewControllers之间传递日期,我建议你应该使用prepare for segue。这是一个例子。

  1. 您应该在Storyboard中的视图之间添加segue。不要在按钮和第二个视图之间创建segue,而是从第一个视图到第二个视图创建segue。

  2. 您应该为segue实施准备并执行segue方法:

  3. 第一个:

        class SomeUIViewController: UIViewController {
    
        var someData: Int = 123
    
        override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            let cell = tableView.cellForRow(at: indexPath as IndexPath)
            tableView.deselectRow(at: indexPath as IndexPath, animated: true)
            performSegue(withIdentifier: "Show the second class", sender: cell)
        }
    
        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if segue.identifier == "Show the second class" {
                if let secondVC = segue.destination as? AnotherUIViewController {
                    secondVC.anotherData = self.someData
                }
            }
        }
    }
    

    第二个:

    class AnotherUIViewController: UIViewController {
        var anotherData: Int?
    
        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if segue.identifier == "Show the second class" {
                if let secondVC = segue.destination as? AnotherUIViewController {
                    secondVC.anotherData = self.someData
                }
            }
        }
    }
    

答案 2 :(得分:0)

要传递图像和文本,可以创建一个Class对象:

class imageData: NSObject {

    var image: UIImage?
    var data: String?
}

然后将值存储在已定义对象的数组中:

var imageDataArray = [imageData]()

添加新数据:

Let imgData = imageData()
imgData.image = //your image
imgData.data = //your text
imageDataArray.append(imgData) //adding the data to array

现在你可以使用segue方法将这个数组传递给你的viewcontroller。

答案 3 :(得分:0)

您应该将 commonArrayOfSelectedImages 数组修改为封装图像和评级的对象数组,如:

class CommonImage {
    let image: UIImage
    var rate: String?

    //create custom inits

}

每次访问 commonArrayOfSelectedImages 数组的元素时,您将获得 CommonImage 对象,其中每个图像都有相关评级。

答案 4 :(得分:0)

试试这个...

1.创建带有两个键的字典和ex的值。图像和速率两个关键。

2.然后在你的数组中添加这个字典并传递这个数组。

let temDic = NSMutableDictionary()
temDic.setValue(product?.theRate, forKey: "rate")
temDic.setValue(image!, forKey: "image")
self.appDelegate.commonArrayOfSelectedImages.add(temDic)