Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SwiftUI for iOS中检测文本字段何时失去焦点?_Ios_Swift_Swiftui - Fatal编程技术网

如何在SwiftUI for iOS中检测文本字段何时失去焦点?

如何在SwiftUI for iOS中检测文本字段何时失去焦点?,ios,swift,swiftui,Ios,Swift,Swiftui,我找到了这个方法 TextField("Name", text: $name) 但它仅适用于MacOS,我如何才能对iOS执行类似操作?您可以使用文本字段中存在的初始值设定项init(uu:text:onEditingChanged:onCommit:)。在那里,当您开始编辑和结束编辑时,将触发一个操作。您可以找到下面的最小示例 func focusable(_ isFocusable: Bool = true, onFocusChange: @escaping (Bool) -> Vo

我找到了这个方法

TextField("Name", text: $name)

但它仅适用于MacOS,我如何才能对iOS执行类似操作?

您可以使用文本字段中存在的初始值设定项
init(uu:text:onEditingChanged:onCommit:)
。在那里,当您开始编辑和结束编辑时,将触发一个操作。您可以找到下面的最小示例

func focusable(_ isFocusable: Bool = true, onFocusChange: @escaping (Bool) -> Void = { _ in }) -> some View
希望这有帮助。

iOS 15 在iOS 15中,我们可以使用:


此解决方案的问题是,如果没有其他文本字段,并且使用.numberPad键盘,则onEditingChanged:with never get Call。onCommit也不会:我现在用.numberPad做了同样的尝试,似乎效果很好。XCode 11.2 beta版和我测试的设备是在iOS 13.2 Developer beta 4.onEditingChanged上运行的iPhone XS Max,它在获得焦点时调用,而不是在释放焦点时调用(因为如果视图中没有其他文本字段,则没有其他UI元素将成为第一响应者)。这同样适用于onCommit:SwiftUI
。警报
触发
onEditingChanged
具有
false
值的函数。
import SwiftUI

struct ContentView: View {
    @State private var greeting: String = "Hello world!"
    var body: some View {
        TextField("Welcome", text: $greeting, onEditingChanged: { (editingChanged) in
            if editingChanged {
                print("TextField focused")
            } else {
                print("TextField focus removed")
            }
        })
    }
}
TextField("Name", text: $name)
    .onFocus { isFocused in
        // ...
    }