问题标签 [swiftui-environment]

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.

0 投票
1 回答
103 浏览

swiftui - NavigationLink 从其子视图返回视图后不可点击

我的应用程序有一个多级布局 AView -> BView -> CView -> DView。

我改变

window.rootViewController

到 BView 以“弹出”2 个顶部视图,但由于某种原因,当我回到 BView 时,它的 NavigationLink 不可点击。

有想法该怎么解决这个吗?似乎 BView 不知道它变得可见..

AView.swift:

SceneDelegate.swift:

0 投票
0 回答
48 浏览

ios - 除了 EnvironmentObjects,还有更好的方法在 SwiftUI 中传递状态吗?

我对 SwiftUI 相当陌生。我正在创建一个调查视图。在其中,我从 Plist 加载数据以显示多项选择题列表。我创建了以下内容:

SurveyView(保存整个调查) SurveyQuestionView(保存单个选择题) SurveyAnswerView(保存单个潜在答案的答案,基本上是一个自定义按钮)

我能够以一种很好的方式传递所有数据,使我能够将数据从父级传递给子级。我面临的问题是找到一种将数据备份的好方法。

具体来说,当用户点击一个问题时,它会被选中,而所有其他答案必须被取消选中。需要通知家长点击哪个答案,但答案不知道它是什么答案。

此外,当用户点击完成时,我需要能够知道每个选择的答案是什么。

一种可能的解决方案是创建一个包含所有答案的环境对象,但是底部的每个答案不仅必须知道它是什么答案索引,而且还必须知道问题索引。这似乎比我希望这个简单的按钮包含的要多得多。

有没有更好的办法?

0 投票
1 回答
54 浏览

swift - 访问 @Environment(\.presentationMode) 阻止 PDFView 出现

问题:访问 @Environment(.presentationMode) 会阻止我的 PDFView 显示。

工作代码:在 MainView 中通过 PDFViewer 显示 pdf 文档


损坏的代码:不显示文档也不显示 PDFViewer(唯一的变化是访问 @Environment


问题:任何人都可以解释为什么访问此环境变量似乎会阻止子视图(pdfviewer)出现在主视图中吗?我知道 PDFViewer 正在被初始化,因为当它接收到数据时我仍然会收到更新调用。

我的计划是使用presentationMode 以编程方式弹出视图。

提前致谢。

0 投票
1 回答
189 浏览

ios - SwiftUI DocumentGroup 和切换到后台

我已经为“基于文档的应用程序”制作了一个基于新的 SwiftUI 多平台目标的应用程序。但是,我面临着奇怪的问题。只要应用程序在前台,它就可以正常工作。如果通过任务切换将其移至后台,然后再次移至前台,则会将突变保存到文档中,但 SwiftUI 视图不会接收突变。因此,每当您在 UI 中按下一个更改文档的按钮时,当您从磁盘重新加载文档时,您会看到没有发生任何变化。

所以我在想,我使用 ObservedObjects,一旦我移动到后台,它们可能会被踢出内存。这可能是我的错误的原因吗?

但后来我在 App 结构中添加了一个打印行。

猜猜看……这个打印总是在渲染突变之前执行。这是有道理的。因为file.$document是一个绑定,如果你做了一个变异操作,绑定会警告苹果文件是脏的,但它也会使整个层次结构失效。一旦发生错误,此日志记录仍将打印!

因此, MainView().environmentObject(BindingWrapper(file.$document))我假设一切都是从头开始创建的。BindingWrapper 是一个自定义类,用于转换可观察对象中的绑定。这是我担心的对象之一,他们可能会被释放。但如果它们是新创建的……它们应该一直在那里,对吧?顺便说一句,这个对象归环境所有。所以它不应该被释放。

所以,现在我被困住了。Apple 是否在绑定 / ObservedObjects 上做了一些巧妙的缓存,即使我认为一切都是新创建的,也会将旧对象注入我的视图层次结构中?

0 投票
2 回答
590 浏览

ios - 根据当前配色方案更改 Sign In With Apple 按钮样式

我对 SwiftUISignInWithAppleButtonsignInWithAppleButtonStyle. 我正在尝试根据用户的当前方案或更改按钮的颜色来更改按钮的颜色。这是 iOS 14 和 SwiftUI:

appleButtonWhite更改值时,由于状态正在更改,它会按照应有的方式呈现视图。当我调试按钮时,它具有正确的 appleButtonWhite 值,但由于某种原因,样式永远不会改变。我不知道为什么。我在我的代码中使用常规按钮进行了许多样式更改,并且它可以根据不同的状态正常工作。任何想法为什么Apple不会改变?

0 投票
2 回答
134 浏览

swiftui - SwiftUI:在运行时访问 EnvironmentObject 访问时出现线程错误

我有这个场景有几个环境对象:

在我的 MainTabView 中,我有一个这样创建的选项卡:

在我的 HomeVM 中,我有以下代码:

我启动我的应用程序时发生了崩溃:

线程 1:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

在此处输入图像描述

我想我用得不好,environmentObject但我不明白为什么。

0 投票
1 回答
14 浏览

ios14 - 没有可观察对象的方法

我有一个类方法,显然在类的顶部看不到 @EnvironmentObject var categories: Categories 对象。我知道这很有效,因为我在其他几个文件中使用了它。这也意味着我在 SceneDelegate 中的编码是正确的。软件因错误而崩溃:线程 1:致命错误:未找到类别类型的 ObservableObject。类别的 View.environmentObject(_:) 作为此视图的祖先可能会丢失。错误发生在“for”循环中的方法 updateTotals() 中

0 投票
1 回答
439 浏览

swiftui - 在 SwiftUI 上修改环境对象,从另一个环境对象中清除数据

我正在查看两个环境对象。我正在显示其中一个的数据,并修改另一个上的数据。当我更改第一个对象的数据时,将创建第二个对象的另一个实例并清除其数据。

我创建了一个重现问题的代码示例,如果您在预览中运行它,然后点击增量按钮两次,您将看到列表为空!

该列表仅加载到onAppear块上,并且在计数器更新后创建视图时不会再次调用该列表。

有人可以解释问题出在哪里以及如何解决吗?

0 投票
1 回答
78 浏览

swift - 访问和操作 EnvironmentObject 中的数组项

我有一个EnvironmentObject用来生成列表的

当我在视图中使用它时,我可以使用 aForEach来访问Activities数组中的每个值。

我的问题是当我使用 NavigationLink 将其传递Activity给另一个视图时,它不是使用EnvironmentObject

我的“父视图”代码:

我的孩子查看代码:

如果我随后更新 viewModel,我需要将其复制到子视图中。但我不知道如何让它使用EnvironmentObject, 而不仅仅是我传递给视图的变量。

任何帮助,将不胜感激。

编辑:添加活动类型

0 投票
2 回答
376 浏览

ios - SwiftUI 删除 ForEach 子视图中的数组条目

我对 IOS 开发很陌生,所以如果我以完全不正确的方式使用了代码,请多多包涵。

我使用 swiftui 2,我的问题是我的数据结构中有一个数组,其中包含我想通过 ForEach 在另一个视图中呈现的信息。到目前为止,这是可行的,但是如果我在其中一个子视图中更改数组,那么我会得到一个index out of range error

这是示例数据结构

环境对象:

应用程序文件

视图

子视图

我的假设是 ForEach 不是指最新的 dbhandler.arrays.array.indices 而是指旧的存储但我不知道如何规避它。

你们中有人知道我该如何解决这个问题吗?

任何帮助深表感谢 :)