如何正确为SwiftUI TextEditor设置样式?解决重复传绑定变量问题
解决TextEditorStyle重复传递文本绑定的问题
你之前的写法核心问题是在makeBody里重新创建了一个TextEditor实例,这导致必须手动传递文本绑定,完全没必要。正确的做法是直接对Configuration提供的原有TextEditor实例应用样式。
正确的TextEditorStyle实现
private struct FlippableFieldEditorStyle: TextEditorStyle { @Binding var isBordered: Bool func makeBody(configuration: Configuration) -> some View { // 直接使用configuration.content,即原有的TextEditor实例 configuration.content .frame(maxHeight: 100) .modifier(BaseTextEntryModifier(isBordered: $isBordered)) } }
使用方式
TextEditor(text: $textEntryBinding) .textEditorStyle(FlippableFieldEditorStyle(isBordered: $isEditing))
关于Configuration的说明
- 对于
TextEditorStyle,Configuration(实际类型是TextEditorStyleConfiguration)的核心是content属性,它就是你最初创建的那个TextEditor对象,已经持有了文本绑定,不需要你再手动传递。 - 你之前仿照
TextFieldStyle的写法编译失败,是因为两者的Configuration类型完全不同:TextFieldStyle的配置会暴露文本输入相关的接口,而TextEditorStyle的配置只提供原编辑器实例,不能直接用TextField类型作为参数。
这种写法既避免了重复传参,又能保证样式直接作用在原有的TextEditor上,和TextFieldStyle的使用逻辑保持一致,实现表单控件样式统一。
内容的提问来源于stack exchange,提问作者Todd
相关产品推荐
相关产品推荐

