当点击静态 UITableViewCell 时,使 UIDatePicker 随时间出现
Make UIDatePicker appear with the time when a static UITableViewCell is tapped
我有一个我想要的应用程序,通过点击 UITableViewController
中的静态 UITableViewCell
,UIDatePicker
会在屏幕底部弹出,让我选择时间(例如小时、分钟和 AM/PM)。
显然,它必须完全以编程方式创建,因为
我想隐藏它(当按下选择器上的按钮或
点击选择器外的某处)
我无法将它添加到视图控制器。有什么想法吗?
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
}
请注意,每个要点的实际实施可能因您的情况而异。另外,offscreenFrame
和 onscreenFrame
是我用来简化代码片段的 "imaginary" 变量。
我有一个我想要的应用程序,通过点击 UITableViewController
中的静态 UITableViewCell
,UIDatePicker
会在屏幕底部弹出,让我选择时间(例如小时、分钟和 AM/PM)。
显然,它必须完全以编程方式创建,因为
我想隐藏它(当按下选择器上的按钮或 点击选择器外的某处)
我无法将它添加到视图控制器。有什么想法吗?
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 }
请注意,每个要点的实际实施可能因您的情况而异。另外,offscreenFrame
和 onscreenFrame
是我用来简化代码片段的 "imaginary" 变量。