问题标签 [environmentobject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
swiftui - SwiftUI 工作表不会关闭
使用 Swift5.2.3、iOS14.4.2、XCode12.4、
在 SwiftUI中使用.sheet
修饰符一开始让我感到很兴奋,因为它似乎是一种显示模态表的简单有效的方式。
然而,在现实世界的应用程序中,事实证明它.sheet
几乎可以集成。
这里发现了两个错误:
错误 1:工作表不会偶尔关闭
错误 2:当在工作表的 SegmentPicker 内时,具有 DefaultPickerStyle 的选取器不起作用(请参阅我创建的这个 Stackoverlow-question)
现在让我们关注错误 Nr1:“工作表未关闭”:
cmdpresentationMode.wrappedValue.dismiss()
应该关闭工作表。它适用于 90% 的情况。但是每隔一段时间,在没有给出原因的情况下,模态表并没有关闭。
这是一个代码摘录:
我还尝试将关闭调用包装在主线程中:
但这并没有帮助。
知道为什么 SwiftUI.sheets
不会使用presentationMode
来关闭它吗?
在这里,我首先添加了调用工作表的方式。由于从一个更大的应用程序中取出,我显然只在这里展示了一个关于如何调用工作表的示例:
swiftui - 风格为 DefaultPickerStyle() 的 SwiftUI Picker 不起作用
使用 Swift5.2.3、iOS14.4.2、XCode12.4、
在 SwiftUI中使用.sheet
修饰符一开始让我感到很兴奋,因为它似乎是一种显示模态表的简单有效的方式。
然而,在现实世界的应用程序中,事实证明它.sheet
几乎可以集成。
这是发现的两个错误(其中包括......):
错误 1:具有 DefaultPickerStyle 的选取器在工作表的 SegmentPicker 内时不起作用
错误 2:工作表不会偶尔关闭(请参阅我创建的这个 Stackoverlow 问题)
现在让我们关注错误 Nr1:“在工作表的 SegmentPicker 内时,具有 DefaultPickerStyle 的选取器不起作用”。
我的意思可以在这个例子中得到最好的体现。这是真实世界应用程序的摘录。(是的,我需要放置这么多视图,因为普通的教科书示例工作得非常好 - 但一旦它变得更复杂一点......)。
请注意,“可怕的孩子”真的是这样.pickerStyle(DefaultPickerStyle())
!(您会在名为SettingsView
.
如果我用 - 替换样式,.pickerStyle(MenuPickerStyle())
那么应用程序工作得很好。
有什么问题DefaultPickerStyle()
???
请参阅此处说明问题的两个视频:
视频 1:FAULT 显示DefaultPickerStyle()
(您会看到.onChange(of: categoryIndex) { (idx) in ...}
从未使用此选择器样式调用...)
视频 2:正确的节目MenuPickerStyle()
ContentView 如下所示:
InfoSettingsView 如下所示:
InfoView 如下所示:
SettingsView 如下所示:
知道为什么 SwiftUI.sheet
的 DefaultPickerStyle() 在上述情况下不能正常工作吗?
asynchronous - SwiftUI 在多个视图上使用环境对象会导致导航问题
不知道我是否在滥用环境对象的想法,但是在使用发布延迟异步值的环境对象时遇到问题。一个视图导航到下一个视图,但随后“根”被更新,结果导致“回声”,或者即使处理了导航问题。当使用导航之间的转换时,这个问题变得更加明显。是否有正确的使用模式来避免这种情况?或者其他一些解决方案?
任何指导将不胜感激。
附上一个精简的样本来说明问题。
Xcode 12.4 IOS 14.1
swift - 在 SwiftUI 中的非视图类之间传递环境对象
我知道EnvironmentObject
属性包装器可用于将对象传递给视图。我有一个会话对象,我将其传递给我的意见。现在我需要将它传递给我的模型类之一(即非视图)。理想情况下,这个模型(接收会话对象)被实例化为StateObject
.
上面的代码将不起作用(可以理解),因为:
关于如何在会话中传递的任何建议TransactionsModel
?
swiftui - SwiftUI NavigationView 意外弹出到根目录
我创建了一些 SwiftUI 代码,这些代码使用一个EnvironmentObject
来存储布尔值以返回到根视图,另一个EnvironmentObject
用于存储一个旨在跨多个视图使用的分数变量。
在这个例子中,我有两个游戏,一个红色游戏和一个蓝色游戏。我有.redStacked
最初.blueStacked
设置为false
. 他们各自NavigationLinks
将它们设置为true
. 在游戏结束时,“主页”按钮将其设置回false
,这会将导航堆栈展开回根视图。
我遇到的问题是对分数 EnvironmentObject
的任何更新都会意外地过早地将导航堆栈弹出回根视图。
在下面的示例代码中,游戏之间的唯一区别是红色游戏按钮将 +1 添加到其 score 环境变量。在这种情况下,添加了一个点并执行到最终页面的导航链接,但随后它立即橡皮筋回到开头。Blue Game 没有按预期更新 score 环境变量和转换。
我欢迎任何关于为什么会发生这种情况的见解。提前致谢。
swiftui - 将 `environmentObject` 数据传递给另一个类(单例)
我有一个observableObject
包含一些数据的类。
可观察类
我创建并将其SceneDelegate
作为environmentObject
视图层次结构传递。
场景委托
问题是我有一个与服务器同步的单例类,我需要更新UserManager
类中的数据。
单例类
但它根本不起作用。我无法发布单例类的更改。
ios - SwiftUI:环境对象发布者不会在 onReceive 中发送更新
我有一个网络监视器,我想在状态发生变化时从那里接收通知。
看起来像这样:
我在 Home 中创建了一个网络监视器的@StateObject并通过环境对象发送它。
我希望在ContentView中接收发生的任何更改。
我不明白为什么每当网络状态发生变化时,onReceive都不会触发。
编辑:我正在使用共享实例在 AppDelegate 中开始监控。
swiftui - 在 SwiftUI 中使用 ForEach(data:,content:) 和 @EnvironmentObject 而不使用尾随闭包语法?
我正在重构我的代码,并希望将成员初始化程序与 ForEach(data:,content:) 一起使用。
我有一个视图模型,其中包含符合 Identifiable 的结构数组:
然后我创建了一个 CellView,它有一个 CellModel 的成员初始化器,还有一个 EnvironmentalObject,它是 ViewModel 的一个实例:
但是,当我创建父视图时,我在 ForEach(data:, content:) 行上收到编译器错误:
我知道这是因为 ForEach(data:,content:) 试图将 EnvironmentObject 和单个模型都传递给每个 CellView,但是有没有办法做到这一点而不必使用 ForEach(data:,content:)尾随关闭?:
ios - SwiftUI ObservedObject 每次都会重新启动
我有一个简单的类来在我的 SwiftUI 应用程序中存储一些数据:
我还将它定义为EnvironmentObject
在主应用程序结构中:
在我的内容视图中,我嵌入了一个 UIKit 文本视图:
其中EditorTextView是UITextView
通过UIViewRepresentable
.
现在,我要做的是在 EditorTextView 中更新 UserData,例如,将一些用户输入存储到UserData.description
. 所以我在我的 Coordinator 中定义了如下的类(代码只是示例):
我的问题是:
尽管它使用“我的新文本”进行了更新(如调试器所示),但 的值userData.description
再次使用值“初始文本”重新启动。就像每次都创建 UserData 类一样。
我尝试使用@StateObject 而不是@ObservedObject,但这并没有什么不同。
ios - 致命错误:未找到 SelectedTab 类型的 ObservableObject。SelectedTab 的 View.environmentObject(_:) 作为此视图的祖先可能会丢失
此处出错 - selectedTab = tab.getTab()
致命错误:未找到 SelectedTab 类型的 ObservableObject。SelectedTab 的 View.environmentObject(_:) 作为该视图的祖先可能会丢失。
}