我目前有以下自定义组件包装和样式的默认TextField从快速用户界面.我遇到了一个问题,我现在需要重新使用它,@Binding不再只是字符串,而是一个像int或Double这样的数字,因此潜在的TextField需要改变,接受TextField(value: ..., formatter: ...)而不仅仅是text.

我可以将所有修饰符转换为自定义修饰符,并将其应用于相关的文本字段以应用样式,但我想知道是否有一种解决方案可以将其保留为自定义组件,而不是允许TextInputSmall接受和传递所有可能的Textfield参数排列

TextInputSmall("", text: $someString)TextInputSmall("", value: $someNumber, formatter: .number)

struct TextInputSmall: View {
  // Public Variables
  var accentColor = Color._orange
  @Binding var text: String
  
  // Private Variables
  @FocusState private var focused: Bool
  
  // Body
  var body: some View {
    TextField(
      "",
      text: $text
    )
    .font(...)
    .foregroundStyle(...)
    .accentColor(...)
    .focused($focused)
    .submitLabel(.done)
    .frame(...)
    .padding(...)
    .background(...)
  }
}

推荐答案

您基本上可以"窃取"TextField的声明及其初始值设定项,并将它们放入您自己的代码中.在包装器中添加TextField属性,并在每个初始化器中,通过使用相应的初始化器创建TextField来初始化该属性.

以下是init(_:text:)init(_:value:format)的示例:

struct CustomTextField<Label: View>: View {
    let textField: TextField<Label>
    
    init(_ title: LocalizedStringKey, text: Binding<String>) where Label == Text {
        textField = TextField(title, text: text)
    }
    
    init<F>(_ title: LocalizedStringKey, value: Binding<F.FormatInput>, format: F)
        where F: ParseableFormatStyle, F.FormatOutput == String, Label == Text {
        textField = TextField(title, value: value, format: format)
    }
    
    var body: some View {
        textField
            .padding(10)
            // ...add your own styling...
    }
}

也就是说,如果你想要TextField.init的组合中的all个,这是相当单调乏味的.按照您的建议,使用ViewModifier是更贴切、更正确的解决方案.

Ios相关问答推荐

无法在fastlane和github操作中从react-native 应用程序构建ios

SwiftUI文本编辑器内部滚动填充,无需文本裁剪

如何在react 本机模块中使用Bundle.main.Path()在SWIFT中导入assets资源

删除领域中的cartItem时出现问题

AVFoundation Camera推出变焦SWIFT

使用 WebKit 加载 YouTube 视频时控制台中打印警告

为什么applicationState发布者只发布一次?

创建方案时运行 pod install 时出错

尽管存在浮点错误,如何显示正确的计算结果.计算器应用程序

将 URLCache 子类与 URLSession 一起使用

Swift Combine 防止初始值触发接收器并同时防止重复?

FileHandle 不会在 iOS 中释放内存

用溢出的长文本对齐 Flutter 中的行和列

有什么方法可以预填充核心数据?

NSFetchedResultsController 由字符串的第一个字母创建的部分

将自定义对象保存到 NSUserDefaults

正确的领域使用模式/最佳实践?

SRCROOT 和 PROJECT_DIR 有什么区别?

测试目标 X 遇到错误(提前意外退出,操作从未完成 bootstrap - 不会try 重新启动

Xcode 5 和 iOS 7:架构和有效架构