gpt4 book ai didi

ios - 我在一个 View Controller 上有两个 TableView,如何根据被点击的 TableView 将数据传递给单独的 View Controller?

转载 作者:行者123 更新时间:2023-12-01 16:13:13 25 4
gpt4 key购买 nike

首先,如果之前有人问过这个问题,或者回答起来相对简单,我深表歉意。总的来说,我对 Swift/编程比较陌生,并且仍在尽可能多地自学。我通常会查看开发者文档/reddit/google 以获取我所遇到问题的答案。如果有更好的方法来寻找答案或支持,如果可能的话,我将不胜感激任何一般提示或技巧!

在我目前正在处理的项目中,我的一个 View Controller 包含两个单独的 TableView,每个都由来自主数组的过滤结果填充。主阵列由类(class)组成,每个类(class)都有名称、学习类型和主题。两个过滤后的数组是根据类(class)的学习类型过滤的:

var visualArray: [Module] = AllModules.modulesArray.filter { $0.learningType == .visual }
var kinestheticArray: [Module] = AllModules.modulesArray.filter { $0.learningType == .kinesthetic }

我想要完成的是根据用户点击的类(class)将模块的名称和模块的描述传递给单独的 View Controller 。我试图在' 中完成此操作didSelectRowAt ' 方法和 ' 准备(为转场:) '方法无济于事。我想要发生的是目标 Controller 上标签的文本属性,以显示所选类(class)的名称,实际发生的是标签保持不变。

这是我上面提到的 prepare(for segue:) 方法的当前代码:
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

let tableView = UITableView()

// Set up indexPath
guard let visualIndexPath = visualTableView.indexPathForSelectedRow,
let kinestheticIndexPath = kinestheticTableView.indexPathForSelectedRow else { return }
let visualModules = visualArray[visualIndexPath.row]
let kinestheticModules = kinestheticArray[kinestheticIndexPath.row]

// Set up destination
guard let destVC = segue.destination as? ModuleVC else { return }
if tableView == visualTableView {
print(visualModules.name, visualModules.description)
destVC.moduleName = visualModules.name
destVC.moduleDescription = visualModules.description
} else if tableView == kinestheticTableView {
destVC.moduleName = kinestheticModules.name
destVC.moduleDescription = kinestheticModules.description
}

}

这是我当前的目标 View Controller 代码:
class ModuleVC: UIViewController {

var moduleName: String?
var moduleDescription: String?

override func viewDidLoad() {
super.viewDidLoad()

setUI()

self.navigationItem.largeTitleDisplayMode = .never
self.navigationController?.navigationBar.prefersLargeTitles = false
}

@IBOutlet var moduleNameLabel: UILabel!
@IBOutlet var moduleDescriptionLabel: UILabel!

func setUI() {

guard let moduleName = moduleName, let moduleDescription = moduleDescription else {return}
moduleNameLabel.text = moduleName
moduleDescriptionLabel.text = moduleDescription

}

}

任何帮助,即使是朝着正确方向迈出的一小步,都将不胜感激。感谢您的时间!

最佳答案

据我所知,问题在于您在 prepare(for segue:) 中实例化了一个通用 tableView。方法,然后进行某种检查以查看 tableView 是否等于您的 visualTableView 或 kinestheticTableView。这些条件都不会满足,因为您将它们与新创建的 tableView 进行比较,其中没有任何内容,甚至没有在您的 View 中布置。

听起来你想做的事情应该在 didSelectRow 中完成。 UITableViewDelegate 的委托(delegate)方法,正如您之前暗示的那样。听起来你可能没有设置正确。

didSelectRowAt UITableViewDelegate 的方法,当一个 tableView 行被点击时,委托(delegate)方法将被触发,它会将被点击的 tableView 作为参数传递。然后,您可以使用它来运行检查,如果点击这两个 tableView 之一,它应该会成功。这是我认为你可以做的一个例子:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if tableView == visualTableView {
let visualModules = visualArray[indexPath.row]
print(visualModules.name, visualModules.description)
// Now call your segue and pass along the data from those modules
} else if tableView == kinestheticTableView {
let kinestheticModules = kinestheticArray[indexPath.row]
// Now call your segue and pass along the data from those modules
}
}

关于ios - 我在一个 View Controller 上有两个 TableView,如何根据被点击的 TableView 将数据传递给单独的 View Controller?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59515315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com