Xcode 13.5 beta中SwiftUI的onFocus已弃用,如何解决?
原因说明
你原先使用的闭包形式onFocus是iOS 15早期beta阶段的临时测试API,并未进入苹果正式发布的SwiftUI版本,Xcode 13.5 beta正式移除了该API,因此原有代码无法运行。
适配方案(iOS 15+)
适配后需要配合@FocusState属性包装器实现同等的聚焦监听效果,完整示例代码如下:
struct DemoView: View { // 1. 声明聚焦状态绑定变量 @FocusState private var isTextFieldFocused: Bool @State private var inputContent = "" var body: some View { TextField("输入提示", text: $inputContent) // 2. 将TextField的聚焦状态和上面声明的变量绑定 .focused($isTextFieldFocused) // 3. 监听聚焦状态变化,执行对应逻辑 .onChange(of: isTextFieldFocused) { isFocused in // 此处替换为你原先的逻辑即可 variable = false } } }
补充说明
- 如果你需要区分聚焦/失焦的不同逻辑,只需要在
onChange的闭包内判断isFocused的布尔值即可:.onChange(of: isTextFieldFocused) { isFocused in if isFocused { // TextField获得焦点时执行的逻辑 } else { // TextField失去焦点时执行的逻辑 } } @FocusState还支持主动修改状态控制TextField的聚焦/失焦,比如调用isTextFieldFocused = true即可手动唤起输入框的焦点。
内容的提问来源于stack exchange,提问作者Sander
相关产品推荐
相关产品推荐

