【问题标题】:Multiple selected rows to show multiple images in other view controller多个选定的行以在其他视图控制器中显示多个图像
【发布时间】:2019-08-03 03:27:42
【问题描述】:

UITableViewController 中选择一个字符串,在另一个视图控制器中显示同名的图片,它应该可以正常工作。

但问题是当我想选择多个字符串来显示多个不同的图片时。 我一直在尝试添加另一个 IBOutlet,将内容加倍,但它只是向我展示了两次相同的图片。

有什么想法吗?

多选 = 真

第一个 VC segue:

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

    if segue.identifier == "tablesegue" {

        if let indexPath = self.tableView.indexPathForSelectedRow {
            let selectedRow = indexPath.row
            let passingVal = segue.destination as! Tabulka_data
            passingVal.selectedImageName = self.tableItems[selectedRow]
        }
    }
}

第二个VC:

@IBOutlet weak var pic: UIImageView!
var selectedImageName:String = ""

override func viewWillAppear(_ animated: Bool) {
    self.pic.image = UIImage(named: selectedImageName)
}

two choices

【问题讨论】:

  • 您可能想使用indexPathsForSelectedRows 来获取一个IndexPath 数组,而不仅仅是一个。然后通过使用数组(在目标和休息中)而不是单一的,你可能会得到你想要的。
  • 似乎是正确的做法,但不知道如何编写代码。请问有什么提示吗?

标签: ios swift cocoa-touch uiviewcontroller


【解决方案1】:

你可以试试这个

let yourDataArray = ["name 1","name 2","name 3","name 4","name 5"]
var imageSelected = [String]()

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


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = yourTable.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    cell.textLabel?.text = yourDataArray[indexPath.row]
    return cell
}


func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    imageSelected.append(yourDataArray[indexPath.row])
    print(imageSelected)
}

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
    for (index, element) in imageSelected.enumerated() {
        if element == yourDataArray[indexPath.row] {
         imageSelected.remove(at: index)
        }
    }
    print(imageSelected)
}

您可以使用 didSelectRowAt 和 didDeoRowAt 来查看选择了哪些行,然后只需将 imageSelected 传递给第二个 viewController

【讨论】:

  • 谢谢,我想,我已经将数组传递给另一个视图控制器,但是如何在那里解压并制作具有相同名称的图像?基本上我拥有的是第一个 VC:passingVal.imagePassed = imageSelected 第二个 VC:var imagePassed = [String]()
  • 当您将数据从第一个 VC 传递到第二个 VC 时,您是否传递了一个带有图像名称的字符串?在这种情况下,您传递一个名称数组,以便您可以做到这一点。在 secondVC 中添加:var imageNamesRecevied = [String]() var arrayImage = [UIImage]() override func viewDidAppear(_ animated: Bool) { for image in imageNamesRecevied { let imageTemp = UIImage(named: image) arrayImage.append(imageTemp!) } } 在 secondVC 中创建图像数组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 2018-01-30
  • 2012-03-30
  • 1970-01-01
  • 2014-07-29
相关资源
最近更新 更多