macos - 为什么相同的 SwiftUI 代码可以在 iOS 上运行而在 macOS 上失败?
问题描述
我使用 Multiplatform 模板构建了一个简单的 SwiftUI 应用程序。它为 iOS 和 macOS 编译,没有错误或警告。所有代码都在共享文件中,我没有添加任何特定于 iOS 或 macOS 的内容。
它可以在 iPhone 和 iPad 模拟器上正常运行。它似乎也可以在 macOS 上运行,产生我期望的界面,但它在后台无法正常工作。没有崩溃,只是不正确的行为。预期会发生的只是用户将数据输入到 TextFields 中,然后对其进行验证并添加到 UserDefaults 中。在 iOS 版本中,无效数据被拒绝(字段恢复为默认值),有效数据存储在 UserDefaults 中,完全符合预期。在 macOS 版本(相同代码)中,所有输入都被拒绝(字段恢复为默认值)。
有什么想法吗?在 SwiftUI 在 macOS 上运行之前需要额外的东西吗?
解决方案
研究一个例子,我发现了解决方案。
这是我发现的:
在 iOS 上,当一个字段获得焦点时它会发出onEditingChanged(true)并且当它在没有提交的情况下失去焦点时(即)它会发出onEditingChanged(false);当它通过提交丢失它时,它会发出onCommit(),然后发出onEditingChanged(false)。恕我直言,最后两个的逻辑顺序不正确。我认为您停止编辑,然后才提交。
在 macOS 上,当一个字段获得焦点时,它会保持沉默,但是一旦你输入任何内容,它就会发出onEditingChanged(true);当它在有或没有提交的情况下失去焦点时,它会发出onEditingChanged(false)后跟onCommit()。恕我直言,这些以正确的逻辑顺序到达,但我们无法区分提交和放弃编辑。
有人可以建议如何区分这些情况吗?
推荐阅读
- ruby-on-rails - 更新与订单关联的连接表...继续创建而不是更新
- batch-file - 使用批处理脚本将 CSV 文件数据加载到雪花云表
- python - 查找在一列中不以大写字母开头的条目
- java - Java 8 - 流 - 收集时的值更新
- spring-boot - 合并来自两个不同服务器的日志
- python-3.x - 检查目标时出错:预期 conv2d 有 4 个维度,但得到了具有形状的数组
- reactjs - 测试一个笑话模拟函数本身
- python - TypeError: 'encoding' is an invalid keyword argument for this function - 我该如何解决?
- react-native - React Native - 异常'- [NSNull length]:在调用multiSet时抛出无法识别的选择器发送到实例0x1e6c059b0'
- php - 没有函数的字符串执行