gpt4 book ai didi

ios - 如何创建具有两个 TableView 的 View ,每个 TableView 在每一行上重复使用一个 pickerview

转载 作者:搜寻专家 更新时间:2023-11-01 06:28:54 25 4
gpt4 key购买 nike

我正在快速开发一个应用程序,其中一个页面有两个表格 View 。每个 TableView 都可以有用户需要的行数。

假设表 A 是关于猫的,而表 B 是关于狗的。表 A 中每一行的第一列是一个包含猫类型的 pickerview,表 B 中每一行的第一列是一个包含狗类型的 pickerview,当用户从 pickerview 中选择时,其余单元格将被填充在那一行。

我的问题是,我不知道如何让每个 pickerview 与它所在的表中的行唯一对应。我可以在定义表行的同时定义选择器,但我不知道如何区分在两个表之间或定义 pickerview 功能。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView == dogTable {
let dogPicker = UIPickerView()
dogPicker.dataSource = self
dogPicker.delegate = self
dogPicker.showsSelectionIndicator = true
dogPicker.tag = indexPath.row
cell.dogType.inputView = dogPicker
} else if tableView == catTable {
let catPicker = UIPickerView()
catPicker.dataSource = self
catPicker.delegate = self
catPicker.showsSelectionIndicator = true
catPicker.tag = indexPath.row
cell.catType.inputView = catPicker
}
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
//not sure now how to tell if I'm dealing with Dogs or Cats.

}

我可以在任何函数的范围之外定义一个 catpickerview 和一个 dogpickerview,从而区分这两个表,但是我不能将标签设置为每行特定的。

lazy var dogPicker : UIPickerView  = { [unowned self] in
let picker = UIPickerView()
picker.delegate = self
picker.dataSource = self
return picker
}()

lazy var catPicker : UIPickerView = { [unowned self] in
let picker = UIPickerView()
picker.delegate = self
picker.dataSource = self
return picker
}()

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView == dogTable {
dogPicker.tag = indexPath.row
// all pickerviews in this table will end up with tag equal to index of final row
cell.dogType.inputView = dogPicker
} else if tableView == "catTable" {
cell.catType.inputView = catPicker
}
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
switch pickerView {
case dogPicker:return Dogs[row].Name
case catPicker:return Cats[row].Name
default:return ""
}
}

所以,这两种方法都行不通。

我怎样才能完成我需要完成的事情?我希望我已经提供了足够的说明,如有必要我可以添加更多内容。

已编辑:根据@Sh_Khan 的评论,将表比较更改为名称,而不是字符串。

最佳答案

我认为,这里的问题是我们绕过了 didSelectRowAtIndexPath,因此 TableView 永远不知道它已被选中。

您可以使用 didSelectRowAtIndexPath 来触发选择器吗?这样您就可以可靠地知道选择了哪个表格 View 和哪个单元格(行)。在选择器的选择事件中,您可以更新基础数据并通过重新加载更新 TableView 。

(现在这取决于您的手机中还发生了什么。)

或者,您可以将一些附加信息注入(inject)单元格的文本字段标记中,您可以在 UITextFieldDelegate 中使用这些信息。

关于ios - 如何创建具有两个 TableView 的 View ,每个 TableView 在每一行上重复使用一个 pickerview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49990368/

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