【发布时间】:2018-04-23 21:38:43
【问题描述】:
我正在快速开发一个应用程序,其中一个页面中有两个表格视图。每个表视图都可以有用户需要的行数。
假设 A 表是关于猫的,而 B 表是关于狗的。表A中每一行的第一列是一个带有猫类型的pickerview,表B中每一行的第一列是一个带有狗类型的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 的评论,将表比较更改为名称,而不是字符串。
【问题讨论】:
标签: ios iphone swift uitableview uipickerview