我正在尝试使用 Darkseal Downpicker在一个 UITableView 里面。我以编程方式添加一个 UITextField,然后按如下方式添加 Downpicker:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
var textField = UITextField()
let cell = UITableViewCell(style: .default, reuseIdentifier: nil)
cell.selectionStyle = .none
textField.text = "TEST"
textField.frame = CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(170), height: CGFloat(30))
var dp: DownPicker!
let test1 = ["test one", "test two"]
dp = DownPicker(textField: textField, withData: test1)
cell.contentView.addSubview(dp)
return cell
}
如果我只添加文本框:
cell.contentView.addSubview(textField)
然后它显示文本字段。但是,如果我如上所示添加 DownPicker:
cell.contentView.addSubview(dp)
我没有显示任何内容,只有一个空的表格 View 。任何有助于理解为什么不显示 DownPicker 的帮助将不胜感激。谢谢。
最佳答案
您需要将 UITextField
和 DownPicker
添加到 View
中。如果它类似于 UIPickerView
,那么您的 DownPicker
只会在您选择 UITextField
时显示。您还需要将 DownPicker
添加到 view
而不是 cell
。
view.addSubView(dp)
编辑
“它采用您的代码中已经存在的任何 UITextField(包括添加到 Storyboard的那些):”- https://github.com/Darkseal/DownPicker
编辑 2
通过查看文档,您要做的是通过在 cellForRowAt
func
dp.addTarget(self, action: #selector(dp_selected(sender:)), for: .valueChanged)
你想添加一个 func
类,里面有 cellForRowAt
func
func dp_selected(sender: AnyObject) {
guard let dp = sender as? DropDown else { return }
if let textfield = dp.getTextField() as? UITextField {
guard let indexPath = tableView.indexPath(for: textfield.superview) else { return }
}
}
此函数将检查发件人是否属于 DropDown
类型,如果是,将尝试获取它所附加的 UITextField
,如果返回,它将如果该单元格在屏幕上不再可见,则尝试获取它正在使用的 IndexPath
可以是 nil
但希望永远不会出现这种情况并已添加检查以确保它存在。
关于objective-c - Downpicker 没有出现在 UITableView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44853310/