Selection Range in SwiftUI
在 SwiftUI 中,没有提供默认的 modifier 来监听 TextView
的 selectionRange
,
这对于文本编辑类 app 来说是很致命的,因为无法控制光标的位置,
但是可以从其他的文章中找到一些思路:
寻找 NSView / UIView 的方法来源于:siteline/SwiftUI-Introspect
本文来介绍一种解决方案,可以实现出以下的代码:
1 | import SwiftUI |
在 SwiftUI 中,没有提供默认的 modifier 来监听 TextView
的 selectionRange
,
这对于文本编辑类 app 来说是很致命的,因为无法控制光标的位置,
但是可以从其他的文章中找到一些思路:
寻找 NSView / UIView 的方法来源于:siteline/SwiftUI-Introspect
本文来介绍一种解决方案,可以实现出以下的代码:
1 | import SwiftUI |
熟悉我的朋友应该知道,我一直在开发一个框架,
用于在 SwiftUI 中以原生的方式来渲染 Markdown 文本。
P.S. 这篇文章也是在我做的编辑器中完成的。
早晨发布了 MarkdownView 的 1.0.0-rc
,也就是正式版的候选版本,
写这篇文章主要是想回顾和总结一路过来的技术点和一些解决方案。
继续接上篇,做完 AnyMyCollection
之后,
我又添加了一个扩展来修改 CustomCollection
在特定类型下的行为:
1 | extension CustomCollection where Element == Int { |
当 Element
是 Int
时,不管三七二十一,直接返回 [4, 5, 6]
但是,运行是发现了这样的现象:
1 | let collection = CustomCollection(1, 2, 3) |
上篇博客中,我们初步了解了为什么需要一个 Type Eraser ,
也分享了一个简单实现 Type Erasure 的方案。
为了更加深入了解类型擦除,我们还是得来看看 Swift 自带的一些 Type Eraser 是如何实现的。
目标是:理解一下其基本思路,并且仿制一个出来。
探索类型擦除的原理和实现,常见的类型橡皮擦有:AnyView、AnyShape、AnyCollection…
在 SwiftUI 中,有时需要对新的 API 做隔离来保证兼容老的系统。
在 View 中很好解决,但是在 Scene 中,你可能会看到这样的错误提示。
好久不见,最近有在好好学习哈哈,
今天来分享下基于 Sandbox 的 URL 访问权限持久化的方案。
写这篇文章的起因是:
简单浏览了下 Tencent/lemon-cleaner 的部分源码,
发现他们用 Apple Script 调用 Finder 操作文件,
这样很好地避免了权限问题,但是研究一番发现,没那么简单….
我的开源项目 MarkdownView 的 0.2.0 版本 终于发布了!
改版本带来了性能上的巨大进步:
Performance
- Rendering is now at least 3x faster on ALL DEVICES.
- Real-time previewing is now much much smoother.
- Scrolling is much quicker and smoother with no frame drop.
- Memory usage has been reduced by 30%
借此机会,记录下我的优化思路。