首页 > 解决方案 > 了解 inputView 和 firstResponder:如何创建一个将 UIDatePicker 显示为键盘的 UITableViewCell?

问题描述

我想创建一个自定义UITableViewCell,它显示一些日期并UIDatePicker在选择时显示为键盘。

虽然我发现了几个处理这个问题的主题,但它们都提供了相同的解决方案:将 a 添加UITextField到单元格并设置此 TextField 的UIDatepPickeras inputView

这个解决方案工作正常,但我不喜欢它。这很 hacky,如果不应该编辑文本,则不需要使用 TextField。我只需要一个显示数据的标签和一个用于更改此日期的 DatePicker 键盘。


我尝试了什么:

再深入一点,我发现它UITableViewCell有自己的inputView属性,它继承自UIResponder. 但是,我不能覆盖 ( Cannot override with a stored property 'inputView') 或分配此属性 ( Cannot assign to property: 'inputView' is a get-only property)。对于canBecomeFirstResponder必须实现/更改以使单元格在 firstResponder / inputView 上工作的其他属性也是如此。

我想知道如何UITextField实现,因为这也是一个UIResponder子类。

长话短说:

是否可以创建我自己的UIView(甚至更好的UITableViewCell)子类作为一种输入视图并显示自定义键盘?

还是使用(隐藏的)TextField 真的是最好的解决方案?

标签: iosswiftuitableviewfirst-responderinputview

解决方案


正如评论中已经提到的那样,它没有任何“hacky”。这是一个标准程序。尽管您的输入视图可能看起来像一个标签或按钮,但它仍然是一个输入字段,它打开一个类似于使用日期选择器的键盘的对话框。

但如果你真的不喜欢使用这个,那么有几种选择。我假设当按下一个单元格(或其中的一部分)时,日期选择器应该出现在某处。那么答案很简单。创建一个将在按下该区域时触发的偶数。您可以使用按钮,可以使用表格视图单元格委托来检查何时按下行,或者如果您认为它更适合您,您甚至可以添加手势识别器。

无论如何,一旦您举办了活动,您就可以在任何您想要的地方展示您的日期选择器。这可以显示一个新窗口或将其放入您的视图控制器中,如果您愿意,甚至可以放入您的表格视图中。

但是,无论您自定义什么,都会否定 iOS 设备的本机逻辑,这可能会打扰一些用户。例如,如果您在选择器显示时没有制作完全相同的动画,那么对于习惯于以原生方式拥有事物的用户来说,它可能看起来很奇怪。

或者,在这种情况下,也许您可​​以比原生做得更好。但请注意,您可能需要完成相当多的任务。动画、触摸事件、关闭日期选择器、重新定位您的表格视图以使日期选择器不会与您的单元格重叠......


推荐阅读