SwiftUI中如何在FocusState从.distance切换至其他非nil值时触发onChange?
解决方案
要实现“焦点从.distance切换到其他非nil字段时触发逻辑”,你可以利用SwiftUI的onChange修饰符同时获取旧焦点值和新焦点值,通过判断这两个值的状态来触发目标代码。
具体做法如下:
- 修改
onChange的闭包参数,同时接收oldValue(之前的焦点状态)和newValue(当前的焦点状态) - 添加判断条件:
oldValue == .distance且newValue != nil(确保是从.distance切换到其他有效字段)
修改后的代码示例:
.onChange(of: detailFocus) { oldValue, newValue in // 当焦点原本是.distance,且切换到其他非nil字段时执行 if oldValue == .distance, newValue != nil { // 这里写你要执行的代码 } }
这个方案不需要额外存储状态,直接通过onChange提供的新旧值对比就能实现需求,完全适配你动态创建字段的场景——不管周围字段是什么,只要满足“从.distance切走且新焦点非空”的条件就会触发。
内容的提问来源于stack exchange,提问作者Petr Smejkal
相关产品推荐
相关产品推荐

