SWIFTUI:在TextField中按下回车键时防止键盘消失

5

我正在使用SwiftUI中的TextField,按下回车键后会使键盘消失。

是否有办法让键盘保持弹出状态,并仍然保持TextField可编辑位置。

谢谢


2
你尝试过多行文本框吗? - NotAPhoenix
1个回答

1

有一个解决办法适用于 iOS 15+,但仍会创建一个键盘的弹跳动画。

如果您有多个文本字段,可以使用 enum@FocusState 而不是 Bool

struct ContentView: View {
    @FocusState var focused: Bool
    @State var text: String = ""

    var body: some View {
        TextField("Text", text: $text)
            .focused($focused)
            .onSubmit {
                focused = true
            }
    }
}

为了实现没有反弹的键盘,我建议使用优秀的第三方库Introspect来获得更好的解决方案。
import Introspect

class TextFieldKeyboardBehavior: UIView, UITextFieldDelegate {
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        return false
    }
}

struct ContentView: View {
    @State var text: String = ""
    var textFieldKeyboardBehavior = TextFieldKeyboardBehavior()
    
    var body: some View {
        TextField("Text", text: $text)
            .introspectTextField { textField in
                textField.delegate = textFieldKeyboardBehavior
            }
    }
}

第一个解决方案在iOS 16上确实会反弹,而Introspect却解决了问题。 - Skoua
嗯,但是你如何检测到按下回车键以执行onSubmit代码呢?请参考https://stackoverflow.com/questions/77212497/prevent-keyboard-for-textfield-from-dismissing-after-a-return-but-need-to-dete - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接