【发布时间】:2021-10-22 13:40:57
【问题描述】:
在SwiftUI 应用程序中,我有几个按钮(我们以 3 为例)。其中之一被突出显示。
当我点击未突出显示的按钮时,之前突出显示的按钮会切换为未突出显示,并且点击的按钮会突出显示。如果我点击已经突出显示的按钮,什么都不会发生。
这个场景很简单,我有一个 highlighBtn 变量,当点击按钮时,highlighBtn 会获取点击按钮的值。然后,当下一次点击碰巧关闭先前突出显示的按钮时,将使用此变量。
这个循环没问题,但问题是我第一次点击的时候。由于某些原因,事情无法正常工作。
这就是我处理 highlighBtn 变量创建的方式:
class ActiveButton: ObservableObject {
@Published var highlighBtn = Button(....)
}
@StateObject var box = ActiveButton()
这里是相关代码,当点击按钮时:
@EnvironmentObject var box: ActiveButton
....
Button(action: {
// Toggle off the previously highlighted button.
box.highlighBtn.highLight = false
.... some useful processing ....
box.highlighBtn = self
})
我应该给出一个细节:如果我点击突出显示的按钮开始,那么一切都会正常进行。
我尝试了各种方法来解决这个看似简单的问题,但都失败了。
第一种方法是尝试初始化 highlighBtn 变量。 第二个是尝试模拟点击突出显示的按钮。
我一定错过了一些简单的东西。 欢迎任何提示。
经过进一步调查.....
我创建了一个演示应用程序来揭示我的问题。
由于我缺乏使用GitHub 的练习,所以我花了一些时间,但现在here 可用。
为此,我在Xcode 中创建了一个SwiftUI 应用程序。
在 SceneDelegate.swift 中,紧随其后的四行代码已针对此应用的需求进行了定制:
// Create the SwiftUI view that provides the window contents.
除此之外,我所做的一切都驻留在文件 ContentView.swift 中。
为了节省一些时间给任何想要看看的人;这是直截了当的方法(即我面临的问题)。
-
运行应用程序(我是在 iPhone 7 上运行的)。您将看到出现七个按钮。其中之一(随机)将突出显示。从突出显示的按钮开始,依次点击几个按钮,次数不限。您将看到应用程序应该如何工作。
-
(关闭后)再次运行应用程序。这一次,您还将根据需要依次点击几个按钮;但首先点击其中一个未突出显示的按钮。此时您会看到问题出现了。
【问题讨论】:
-
你能提供minimal reproducible example吗?我不确定您设置为
false的highLight变量是什么,并且将SwiftUI 视图存储在ObservableObject中对我来说似乎不正确.. -
您的问题似乎很容易回答,而且问题不难,但是您的提问方式和问题示例不清楚,您可以改用最小的工作问题。
-
@Philip_Dukhov,swiftPunk。我已经完成了帖子并在 GitHub 上提供了一个演示应用程序,希望您可以看看并告诉我您的想法。