【问题标题】:How to recognise tap of Toggle Button for SwiftUI?如何识别 SwiftUI 的切换按钮的点击?
【发布时间】:2023-01-28 03:23:09
【问题描述】:

我已经将一个常量值传递给 Toggle,因为我想对 toggle 的值更改执行某些操作,并且需要在 Tap Gesture 上完成,因为在内部我可能也需要更改 toggle 的值。但是 hus 代码不起作用

    @State private var toggle = false
    var body: some View {
           VStack {
               Toggle(isOn: .constant(toggle)) {
                    Text("Hello World")
                }
                .padding()
                .onTapGesture {
                    print("Tapped")
                    self.toggle.toggle()
                }
            }

        }
}

【问题讨论】:

  • 尝试 onChangetoggle。 UI 部分将无关紧要,因为它会在变量更改时触发。
  • 这是否回答了您的问题stackoverflow.com/a/63360119/12299030?或者这个stackoverflow.com/a/63287584/12299030
  • 我不能使用 onChange 方法,因为只要切换值发生变化,它就会被触发。在我的实际代码中,我需要在切换值更改时调用 api,而且在一种情况下,我需要从应用程序更改切换值。如果我使用 onChange 方法,每次值从应用程序或 UI 更改时,都会触发此方法并且它将进入无限循环,因此为了避免这种情况,我想使用 Tap Gesture。
  • @Asperi,在这种情况下也不会触发onTapGesture
  • 然后你只需要代理绑定(如stackoverflow.com/a/59341588/12299030)来拦截set中的变化,并将其转移到状态或跳过,并且没有额外的点击手势。

标签: ios swift swiftui swiftui-navigationview


【解决方案1】:
Toggle(isOn: Binding(
get:{isToggled},
set:{v in
  isToggled = v
  customAction()
})) {
  Text("Status")
}

如果状态被修改,自定义操作代码不会被触发。但会在 UI 交互时触发

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 2021-11-17
    • 2011-09-18
    • 1970-01-01
    相关资源
    最近更新 更多