如何使用两个tableView创建视图,每行都在每行重复使用pickerview



我正在Swift开发一个应用程序,其中一个页面中有两个桌面视图。每个表视图都可以具有与用户需求一样多的行。

说表A是关于猫的,表B是关于狗的。表A中每一行的第一列是带有猫类类型的挑剔,表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,因此表视图永远不知道它已被选中。

您可以使用didSelectRowatIndExpath触发选择器吗?这样,您可以可靠地知道选择了哪个tableView和哪个单元格(行(。在选择器的选择活动中,您可以更新基础数据并使用重新加载更新表视图。

(这取决于您的单元格中还在发生什么。(

另外,您可以将一些其他信息注入单元格的TextField标签中,您可以在UitextfieldDelegate中使用。

最新更新