我想在选择单元格时触发一些事件。例如,在点击“用户名”行时开始编辑用户名。点击“性别”行后,弹出底部的选择器视图,其中包含男性/女性选择。 据我所知,我需要把这些事件放在这里:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
}
但我不知道如何做到这一点。有人有想法吗?提前谢谢。
答案 0 :(得分:3)
基本上,您可以让每个单元格都有自己的选择器视图。
open class DatePickerTableViewCell: UITableViewCell {
let picker = UIDatePicker()
open override func awakeFromNib() {
super.awakeFromNib()
picker.datePickerMode = UIDatePickerMode.date
}
open override var canBecomeFirstResponder: Bool {
return true
}
open override var canResignFirstResponder: Bool {
return true
}
open override var inputView: UIView? {
return picker
}
...
}
然后在didSelectRowAt
中,只需制作单元格becomeFirstResponder
:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let cell = tableView.cellForRow(at: indexPath) as? DatePickerTableViewCell {
if !cell.isFirstResponder {
_ = cell.becomeFirstResponder()
}
}
}
您可以查看我的库以获取详细信息: https://github.com/hijamoya/PickerViewCell
答案 1 :(得分:1)
你是对的。将逻辑放在didSelectRowAtIndexPath中是一个很好的方法。
你是如何做的就是编写代码。没有股票回答。
如果您希望内容显示在当前窗口的顶部,那么您需要自己处理。在iPad上,您可以使用弹出窗口,但iPhone / iPod touch上不支持弹出窗口。您可能会考虑使用第三方popover库来为iPhone提供popover支持。在Github上有几个,也可能有几个在Cocoa Controls上。我之前使用过一个,但它有一些问题,所以我不推荐它。
如果你可以展示一个全新的视图控制器,那么只需在故事板中定义一个新的视图控制器,给它一个唯一的标识符,使用instantiateViewControllerWithIdentifier
创建它,然后presentViewController:animated:
以模态显示它
答案 2 :(得分:0)
UIPickerView
是UIView
的子类,因此您可以像添加任何其他UIView
对象一样添加和使用它。对于您的具体要求,您应该创建一个UIPickerView
的对象,并在必要时显示和隐藏它。
因此,创建一个UIPickerView
并在表格视图上方添加tableView,并在didSelectRowAtIndexPath
集pickerView.hidden = false
您也可以通过
从底部制作动画UIView.animateWithDuration(1, animations: { () -> Void in
// And set final frame here
})