ios - 了解 inputView 和 firstResponder:如何创建一个将 UIDatePicker 显示为键盘的 UITableViewCell?
问题描述
我想创建一个自定义UITableViewCell
,它显示一些日期并UIDatePicker
在选择时显示为键盘。
虽然我发现了几个处理这个问题的主题,但它们都提供了相同的解决方案:将 a 添加UITextField
到单元格并设置此 TextField 的UIDatepPicker
as 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 真的是最好的解决方案?
解决方案
正如评论中已经提到的那样,它没有任何“hacky”。这是一个标准程序。尽管您的输入视图可能看起来像一个标签或按钮,但它仍然是一个输入字段,它打开一个类似于使用日期选择器的键盘的对话框。
但如果你真的不喜欢使用这个,那么有几种选择。我假设当按下一个单元格(或其中的一部分)时,日期选择器应该出现在某处。那么答案很简单。创建一个将在按下该区域时触发的偶数。您可以使用按钮,可以使用表格视图单元格委托来检查何时按下行,或者如果您认为它更适合您,您甚至可以添加手势识别器。
无论如何,一旦您举办了活动,您就可以在任何您想要的地方展示您的日期选择器。这可以显示一个新窗口或将其放入您的视图控制器中,如果您愿意,甚至可以放入您的表格视图中。
但是,无论您自定义什么,都会否定 iOS 设备的本机逻辑,这可能会打扰一些用户。例如,如果您在选择器显示时没有制作完全相同的动画,那么对于习惯于以原生方式拥有事物的用户来说,它可能看起来很奇怪。
或者,在这种情况下,也许您可以比原生做得更好。但请注意,您可能需要完成相当多的任务。动画、触摸事件、关闭日期选择器、重新定位您的表格视图以使日期选择器不会与您的单元格重叠......
推荐阅读
- java - 创建 SSL 证书服务器无法启动:com.ibm.crypto.tools.KeyTool 错误?
- vue.js - 开玩笑地模拟 CDN vue js 脚本注入
- sql - 基于 3 个领域的学生成绩排名
- c# - IIS 中的 Windows 身份验证问题
- powershell - 使用 urn 的 Powershell/Outlook 高级搜索
- solr - Solr 嵌套连接
- angular - localhost 在运行测试用例后拒绝连接显示
- c# - Azure Function .Net 5 使用 ServiceBusTrigger
- telegram - 如何让 Telegram 机器人向群组发送通知?
- mongodb - 在这种情况下,为什么 $gt 运算符在没有 $expr 的情况下不起作用?