如何检测SwiftUI中DisclosureGroup的点击、展开与收起状态?
如何检测SwiftUI DisclosureGroup的点击操作与展开/收起状态
当然可以,你可以通过两种核心方式实现需求:
1. 监听展开/收起状态变化
通过给DisclosureGroup绑定一个状态变量,配合onChange修饰器就能实时捕获展开/收起的状态切换:
struct ContentView: View { @State private var isGroupExpanded = false let description = "这里是展开后显示的内容" var body: some View { DisclosureGroup(isExpanded: $isGroupExpanded) { Text(description) } label: { Text("title") } .onChange(of: isGroupExpanded) { newState in if newState { print("分组已展开") } else { print("分组已收起") } } } }
绑定的isGroupExpanded变量会自动同步DisclosureGroup的状态,onChange会在状态变化时触发回调逻辑。
2. 检测点击操作
如果需要监听label的点击事件,有两种实现方式:
方式一:保留默认切换逻辑,同时监听点击
使用simultaneousGesture可以在不破坏DisclosureGroup默认展开/收起行为的前提下,额外捕获点击事件:
DisclosureGroup(isExpanded: $isGroupExpanded) { Text(description) } label: { Text("title") .simultaneousGesture( TapGesture().onEnded { print("Label被点击") } ) }
方式二:自定义点击逻辑
如果你需要完全控制点击后的行为(比如先执行某些操作再切换状态),可以直接给label添加onTapGesture并手动切换状态:
DisclosureGroup(isExpanded: $isGroupExpanded) { Text(description) } label: { Text("title") .onTapGesture { print("Label被点击,执行自定义逻辑") isGroupExpanded.toggle() // 手动切换展开状态 } }
内容的提问来源于stack exchange,提问作者GreatCornholio
相关产品推荐
相关产品推荐

