您好我有一个表视图控制器名称为MyTableViewController
。在MyTableViewController
中,我在表的UIPickerView
内使用了不同的cell
,其名称为headerCell
,由以下函数设置,并且我没有使用任何{ {1}}
UIPickerView
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerCell = tableView.dequeueReusableCell(withIdentifier: "header") as! MyTableViewCell
headerCell.contentView.backgroundColor = UIColor.white
return headerCell
}
是MyTableViewCell
类的类,其中我附加了所有表格布局,例如UITableViewCell
,Label
,TextField
,Button
等等。
我的第二个单元格为UIPickerView
和middleCell
,为
footerCell
你可以看到有不同的override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell : SubscriptionTableViewCell?
if indexPath.row == 1 {
cell = tableView.dequeueReusableCell(withIdentifier: "footer", for: indexPath) as? SubscriptionTableViewCell
cell!.cardTypePicker.delegate = self
cell!.expMonth.delegate = self
cell!.expYear.delegate = self
cell!.countryPicker.delegate = self
cell!.shippingMethodPicker.delegate = self
cell!.cardTypePicker.dataSource = self
cell!.expMonth.dataSource = self
cell!.expYear.dataSource = self
cell!.countryPicker.dataSource = self
cell!.shippingMethodPicker.dataSource = self
}else {
cell = tableView.dequeueReusableCell(withIdentifier: "middle", for: indexPath) as? SubscriptionTableViewCell
cell!.variantPicker.delegate = self
cell!.variantPicker.dataSource = self
}
return cell!
}
。
所以现在我无法理解我应该如何在UIPickerView
内使用UIPickerView
个代表。
请帮助谢谢。
答案 0 :(得分:1)
class TableViewCell:UITableViewCell {
@IBOutlet var pickerView: UIPickerView!
var arrCountryName : [String] = []
override func awakeFromNib() {
super.awakeFromNib()
arrCountryName = ["India" , "Australia"]
pickerView.delegate = self
pickerView.dataSource = self
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
扩展TableViewCell:UIPickerViewDataSource,UIPickerViewDelegate {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return arrCountryName.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return arrCountryName[row]
}
}
答案 1 :(得分:1)
您要问的术语是Inline Picker
。实现此功能的方法有很多种。您可以在UIPickerView
中添加UITableViewCell
,并使其高度限制,您可以根据需要进行修改。如果您想使用第三方选择器,请参阅以下链接:
答案 2 :(得分:0)
UIView上有一个名为tag
的属性,您可以将其用于任何目的。您可以将表的行号分配给它,然后在委托中检查它。
如果可以插入或删除行,则需要小心 - 您需要重新加载受影响的行并更新标记。
编辑(另一种方式):
您无需为每个选择器分配相同的委托。您可以创建实现委托协议的新类。
所以,
class CountryPickerDelegate: UIPickerDelegate {
// do what the country picker needs
// The init can take the VC if you need that.
// add a weak var viewController: MyTableViewController? = nil
}
class CardTypePickerDelegate: UIPickerDelegate {
// do what the card picker needs
// The init can take the VC if you need that.
// add a weak var viewController: MyTableViewController = nil
}
然后,
cell!.countryPicker.delegate = CountryPickerDelegate(viewController: self)