探索NSTextField

最近,我正在一个简单的待办事项列表应用程序中玩NSTextField。 我想在每个待办事项中包含一个可编辑的文本字符串。 我写这篇文章是为了谈论我一直在申请的东西。

建立项目

这是一个待办事项列表,我将使用NSCollectionView构建基本的UI。 该布局是一个简单的基于行的垂直布局。 我可以使用NSCollectionViewFlowLayout轻松实现这一点。

显示待办事项

由于我要显示的待办事项内容非常简单,因此我选择一个NSTextField作为容器。 我还将默认textField变量链接到放置在该项目中的NSTextField组件。 现在,我可以通过设置“ textField?.stringValue ”轻松显示待办事项。

NSTextFieldDelegate中的回调

该协议实际上是NSControlTextEditingDelegate的扩展,其中提供了一些基于NSControl的委托方法,这些方法仅适用于文本编辑功能。

默认协议方法提供了在编辑文本内容之前和之后的挂钩。 通过编辑,这意味着在更改内容时在键盘上键入。

实际上,我想在单击该项目时收到通知。 然后,我可以修改内容,然后按“ Return ”以保存更改。

子类化NSTextField

为了通过单击该项目获得通知,我将在NSTextField中重写成为firstFirstResponder() 。 我还创建了相应的委托方法,以便可以在单击项目的基础上进行更改,例如显示插入符号或将应用程序更改为编辑模式等。

拦截返回键

这是通过实现有关命令选择器的委托方法来完成的。 每个键盘命令键都会生成此方法的回调。 通过比较当前的命令选择器,当按下“ Return ”键时,我会收到通知,命令选择器为“ insertNewline(_ 🙂 ”。 然后,我可以保存待办事项,然后更改回查看模式,等等。

摘要

NSTextField的工作逻辑与iOS的UITextField完全不同。 NSTextField委托的文档非常含糊。 在实现您的欲望逻辑之前,应该更谨慎一些,并回避这些回调。