小编Jam*_*ock的帖子

SwiftUI TextField 在点击另一个 TextField 时不会提交更改

我目前正在我的应用程序中构建一些基本的表单功能,当点击另一个 TextField 或在编辑模式下按“完成”时,我遇到了 TextFields 没有更改相关绑定变量中的值的问题。

    @Binding var jobDetails: JobDetails
    @Environment(\.colorScheme) var colorScheme: ColorScheme

    ...

    var body: some View {

       ...
                        HStack {
                            Text("Hourly Rate")
                            Spacer()
                            TextField("", value: $jobDetails.hourlyRateBasic, formatter: TextFormatters().currencyFormatter())

                                .keyboardType(.asciiCapableNumberPad)
                                .multilineTextAlignment(.trailing)
       ...
Run Code Online (Sandbox Code Playgroud)

在 iOS 模拟器中,该字段似乎仅在我输入新值(而不是模拟器中的软键盘)后物理按下键盘上的返回键时才会更新。我希望 TextFieldjobDetails.hourlyRateBasic在点击另一个 TextField 或按“完成”退出编辑模式时提交它的更改。

onEditingChanged当我点击另一个 TextField 时,似乎会触发,但我不知道如何利用它来更改jobDetails新值。

swift swiftui

13
推荐指数
1
解决办法
2506
查看次数

SwiftUI TextField 中的货币输入

我正在尝试实现在编辑模式详细视图中更改货币值的功能,但我正在努力获得数值工作的格式化输入。

struct JobDetailView_Edit: View {

@State var jobDetails: JobDetails

var currencyFormatter: NumberFormatter = {
    let f = NumberFormatter()
    f.numberStyle = .currency
    return f
}()

var body: some View {
    Form {

                Section(header: Text("General")) {
                    HStack {
                        Text("Job Name")
                        Spacer()
                        TextField($jobDetails.jobName)
                            .multilineTextAlignment(.trailing)
                    }

                    TextField($jobDetails.hourlyRateBasic, formatter: currencyFormatter)

                }
... other unimportant code...
Run Code Online (Sandbox Code Playgroud)

数据正确传入,文本字段显示存储在 $jobDetails.hourlyRateBasic 中的格式化值,但是,我无法编辑该字段,因为如果它是一个字符串,我可以这样做。如果我尝试编辑该字段,然后在模拟器中按 Enter 键,则会收到以下错误消息:

[SwiftUI] Failure setting binding's value. The supplied formatter does not produce values of type Double. This may be resolved by ensuring the binding and the …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

4
推荐指数
1
解决办法
5803
查看次数

SwiftUI 导航栏颜色

我正在尝试构建一个主/详细信息类型的示例应用程序,并且我正在努力让 NavigationBar UI 在我的详细信息视图中正常工作。我正在处理的视图的代码如下:

struct JobDetailView : View {

    var jobDetails: JobDetails

    var body: some View {

            Form {

                Section(header: Text("General")) {
                    HStack {
                        Text("Job Name")
                        Spacer()
                        Text(jobDetails.jobName)
                            .multilineTextAlignment(.trailing)
                    }

                    HStack {
                        Text("Hourly Rate")
                        Spacer()
                        Text(TextFormatters().currencyString(amount: jobDetails.hourlyRateBasic!))
                            .multilineTextAlignment(.trailing)
                    }
                }

            }   .padding(.top)
                .navigationBarTitle(Text(jobDetails.jobName))
    }
}

Run Code Online (Sandbox Code Playgroud)

原因.padding(.top)是向上滚动时停止表单与导航栏重叠。

导航栏上的白色背景部分是我的问题(第一张图片),我希望它与 UI 的整体风格保持一致,我希望发生的事情显示在第二张图片中。

我试图添加前景色/背景色和视图来改变这种颜色,但无济于事。我也不愿为 NagivationBar 强制使用颜色,因为这需要进一步配置才能与暗模式一起使用。

运行应用程序时的当前视图。

预期视图。

xcode swift swiftui

3
推荐指数
1
解决办法
9305
查看次数

SwiftUI inputAccesoryView 实现

我正在尝试在 SwiftUI 中的 TextField 上实现 inputAccessoryView。目标是在键盘上方出现一个“完成”按钮,按下该按钮后即可摆脱键盘(即 resignFirstResponder())。

我遇到了以下 Medium 文章,该文章声称完全按照我的要求实施此行为,但是,我正在努力使其正常工作。

包含要实现的方法的媒体链接。

我试图在一个空白的 XCode 项目中实现这个,我的代码编译,但是,TextField 永远不会出现,我无法触摸应该调出键盘的区域。如何正确实现此代码以获得所需的行为?

代码

    import Foundation
import UIKit
import SwiftUI

class TextFieldViewController
    : UIViewController {

    // our custom text field will report changes to the outside
    let text: Binding<String>?

    // if the toolbar (see below) is used (Done), the keyboard shall be dismissed
    // and optionally we execute a provided closure
    let onDismiss: (() -> Void)?

    init (
        text: Binding<String>
        , onDismiss: (() -> Void)?) {

        self.text = …
Run Code Online (Sandbox Code Playgroud)

uitextfield swift swiftui

1
推荐指数
1
解决办法
2728
查看次数

标签 统计

swift ×4

swiftui ×4

uitextfield ×1

xcode ×1