Ios 在tableView中选择单元格时如何触发pickerview

Ios 在tableView中选择单元格时如何触发pickerview,ios,swift,uitableview,uipickerview,Ios,Swift,Uitableview,Uipickerview,我有一个包含7个单元格的tableView,如下所示: 我想在你选择一个单元格时触发一些事件。例如,点击用户名行时开始编辑用户名。点击性别行时,在底部弹出一个选择器视图,其中包含男性/女性选择。 据我所知,我需要把这些事件放在这里面: func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { } 但我不知道如何做到这一点。有人有想法吗?提前感谢。UIPickerView是

我有一个包含7个单元格的tableView,如下所示:

我想在你选择一个单元格时触发一些事件。例如,点击用户名行时开始编辑用户名。点击性别行时,在底部弹出一个选择器视图,其中包含男性/女性选择。 据我所知,我需要把这些事件放在这里面:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

}

但我不知道如何做到这一点。有人有想法吗?提前感谢。

UIPickerView
UIView
的子类,因此您可以像添加和使用任何其他
UIView
对象一样添加和使用它。对于您的特定需求,您应该创建一个
UIPickerView
对象,并在必要时显示和隐藏它。 因此,创建一个
UIPickerView
并在添加了tableView的table view内部视图和
didselectrowatinexpath
set
pickerView.hidden=false

你也可以从底部通过

UIView.animateWithDuration(1, animations: { () -> Void in
            // And set final frame here
        })

你说得对。将逻辑放入DidSelectRowatineXpath是一个很好的方法

你是如何写代码的。没有现成的答案

如果希望内容显示在当前窗口的顶部,则需要自己处理。在iPad上,您可以使用popover,但iPhone/iPod touch本机不支持popover。您可以考虑使用为iPhone提供popover支持的第三方popover库。Github上有几个,Cocoa控件上可能也有几个。我以前用过一个,但有一些问题,所以我不推荐它


如果您可以演示一个全新的视图控制器,那么只需在情节提要中定义一个新的视图控制器,给它一个唯一的标识符,使用
InstanceViewControllerWithiIdentifier
创建它,然后
presentViewController:animated:
以模式显示它。

基本上,可以使每个单元格都有自己的选择器视图

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
  }
  ...
}
然后在您的
中选择rowat
,只需使单元格
成为第一响应者即可:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
 if let cell = tableView.cellForRow(at: indexPath) as? DatePickerTableViewCell {
  if !cell.isFirstResponder {
    _ = cell.becomeFirstResponder()
  }
 }
}
您可以查看我的库以了解详细信息:

在自动布局中,通过设置视图帧来制作动画是不可靠的。通常,您需要使用约束,更改约束上的常量,然后在动画闭包内调用layoutIfNeeded。到目前为止,这是这个问题的最佳答案。谢谢,请随时向我的库提供任何建议。