当点击静态 UITableViewCell 时,使 UIDatePicker 随时间出现

Make UIDatePicker appear with the time when a static UITableViewCell is tapped

我有一个我想要的应用程序,通过点击 UITableViewController 中的静态 UITableViewCellUIDatePicker 会在屏幕底部弹出,让我选择时间(例如小时、分钟和 AM/PM)。

显然,它必须完全以编程方式创建,因为

  1. 我想隐藏它(当按下选择器上的按钮或 点击选择器外的某处)

  2. 我无法将它添加到视图控制器。有什么想法吗?

Apple 在他们的 DateCell 示例中实现了类似的功能,正如 * Islam Q.* 在对您的原始问题的评论中提到的那样。但是,对于这个答案,我假设您更愿意按照您描述的去做。

您的目标实际上可以用很少的代码实现。

  • 首先,将 UIDatePicker 拖出到您的视图控制器上 故事板。
  • 然后,将该日期选择器连接到
    中的 IBOutlet 视图控制器子类的实现。

    @IBOutlet weak var datePicker: UIDatePicker!
    
  • 在同一视图控制器的 viewDidLoad()(或 viewDidAppear(:),如果更合适的话)中,通过更改框架将日期选择器移动到屏幕底部边缘下方。不要动画帧变化。反正屏幕上什么也没有。

    override func viewDidLoad() {
        super.viewDidLoad()
        self.datePicker.frame = self.offscreenFrame
        // ...
    }
    
  • 接下来,在 tableView(_:didSelectRowAtIndexPath:) 中,动画 datePicker 回到屏幕上。在执行动画之前,确保将日期选择器的日期设置为当前日期。

    self.datePicker.date = UIDate()
    // now do the animation
    
  • 最后,确保在适当的时候为日期选择器的关闭设置动画(例如在 tableView(_:didDeselectRowAtIndexPath:) 中)。

    UIView.animateWithDuration(0.2) { () -> Void in
        self.datePicker.frame = self.onscreenFrame
    }
    

请注意,每个要点的实际实施可能因您的情况而异。另外,offscreenFrameonscreenFrame 是我用来简化代码片段的 "imaginary" 变量。