如何在tableView中选择单元格时触发选择器视图

时间:2015-08-14 17:06:34

标签: ios swift uitableview uipickerview

我有一个包含7个单元格的tableView: enter image description here

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

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

}

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

3 个答案:

答案 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)

UIPickerViewUIView的子类,因此您可以像添加任何其他UIView对象一样添加和使用它。对于您的具体要求,您应该创建一个UIPickerView的对象,并在必要时显示和隐藏它。 因此,创建一个UIPickerView并在表格视图上方添加tableView,并在didSelectRowAtIndexPathpickerView.hidden = false

中添加

您也可以通过

从底部制作动画
UIView.animateWithDuration(1, animations: { () -> Void in
            // And set final frame here
        })