问题标签 [swiftui-state]
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 中正确使用动态成员绑定?
我正在尝试Binding
从变量中使用 SwiftUI 的成员@Binding
(通过它对 的支持@dynamicMemberLookup
),但即使是一个简单的示例,我也可以重新创建多个问题。我最好的猜测是我使用不正确,但网上的文档和示例会提出其他建议。
主要问题(可在 Catalina、Big Sur 和 iPadOS 13 和 14 上重现)是在视图打开时删除项目会触发崩溃并出现索引超出范围错误。
第二个问题发生在 Catalina 的文本字段中,尝试编辑文本会隐藏左侧/导航视图。(在 Big Sur 上,编辑文本会隐藏右侧/详细视图,由于导航视图的改进,我认为这是同一问题的不同表现形式。)
我的基本假设是它Binding
本质上存储了一个指针,因此删除指针将变得无效并触发崩溃,并且编辑文本字段会触发父视图的视图更新,使当前内容无效(这由Big Sur 有时会抱怨在视图更新期间修改了状态变量,即使它仅正确用于 a TextField
) 的 init。但是,更改为使用类类型和@ObservedObject
/ @EnvironmentObject
(或@StateObject
)会将崩溃(在 Catalina 和 iPadOS 13/14 上)延迟到执行任何其他导航操作或无效时(在 Big Sur 上)。如果删除也失败,使用tag
选项 inNavigationLink
关闭视图。
第一个问题是:我做错了什么?如果答案是“一切”,那么应该如何在顶级视图中管理一组数据并为嵌套子视图的成员创建绑定?
swiftui - SwiftUI 状态变量不渲染视图,除非在视图内部使用(修改器中的诗句)
抱歉措辞糟糕,但在 onAppear 中我正在更改状态变量,但是除非我在视图内的某处使用该状态变量,否则这不会重新渲染视图。
如果用户未登录,我会尝试弹出模式,但除非我将变量放在视图中,否则它不会弹出,如下所示
swiftui - SwiftUI状态变量封装最佳实践/复杂视图中状态变量过多
我习惯在一个视图中为几个复杂的子视图设置一个类。每个都可以封装它自己的状态。@Binding
SwiftUI 将允许您将长视图函数重构为子视图,但除了通过视图传递变量之外,我没有发现任何其他内容。
我一直在主视图上看到很多状态变量。理想情况下,如果我可以引用主视图的子视图并像这样直接设置它的状态,我会想要什么
mainView.bottomPane.odometer.speed = 55
这可能吗?如果没有,还有其他方法可以围绕主要形式的大量状态变量吗?
swiftui - 用于自定义视图的 SwiftUI ViewModifier
有没有办法创建修改器来更新@State private var
正在修改的视图中的 a?
我有一个自定义视图,它返回Text
带有“动态”背景颜色的 a 或Circle
带有“动态”前景色的 a。
我在我的应用程序周围的不同部分重复使用此视图。如您所见,我需要指定的唯一参数是theText
. 因此,创建此 ChildView 的可能方法如下:
到目前为止没有什么花哨的。现在,我需要创建(也许)一个修饰符等,以便在父视图中,如果我需要对该 ChildView 进行更多自定义,我可以将其值@State private var color
从其他颜色更改为其他颜色。.red
我正在努力实现的示例:
我知道我可以private
从中删除关键字var
并在构造函数中传递color
as 参数(例如:)ChildView(theText: "Hello World", color: .green)
,但我认为这不是解决此问题的方法,因为如果我需要对子视图进行更多自定义,我会最终得到一个非常大的构造函数。
那么,关于如何实现我正在寻找的任何想法?希望我自己解释一下:)谢谢!!!
ios - SwiftUI:检测@State 变量的@Binding 何时发生变化
我试图弄清楚如何改变不同的值View
。这是我的主要观点的实现:
在这个视图中,我正在尝试更改textToProces
变量:
当我更改此行上的值时self.textToProcess = "New text"
,textToProcess
主视图中永远不会收到更改通知。我该怎么做才能在你们知道的主视图中获得更改通知?
我会非常感谢你的帮助
swiftui - SwiftUI:当超级视图也可以呈现表单时,如果从子视图触发,则不会呈现表单
假设我在 NavigationView 中有一个视图,带有前导和尾随按钮。因为我可以从这个视图中呈现两个不同的工作表,所以我使用这样的枚举:
这个主视图在视图中有两个@State 属性来触发工作表展示。
每个按钮都可以触发一个工作表。
在导航视图的末尾,我选择正确的工作表来呈现
它工作正常并以模态显示正确的视图。
但是我在这个主视图中也有多个子视图,可以在点击按钮时显示工作表。在这种情况下,不显示由子视图管理的工作表(即用于跟踪 $isSheetPresented + 由子视图提供的工作表的内容的@State 变量)。没发生什么事。似乎超级视图表修饰符正在阻止子视图呈现表。
是否可以同时让超级视图和子视图管理工作表演示?
swift - 从 API 调用生成视图 - SwiftUI
我是 SwiftUI 的新手,想知道是否有人可以帮助我使我的应用程序正常工作。此外,我试图了解 MVVM,并想知道我是否做得正确。
该应用程序调用https://jsonplaceholder.typicode.com/users,我正在尝试根据 json 响应生成用户卡。
模型:
看法:
视图模型:
我想在UserContainerView 中显示它:
我的问题是没有显示单个 UserView,因为传递给 UserView 的用户数组是空的。有人可以告诉我我做错了什么吗?我对此没有扎实的把握。谢谢。
swift - SwiftUI:如何将数组传递给要在 ForEach 中使用的视图
我想将元素数组传递给视图并使用 ForEach 显示元素。当我传递一个与前一个不同大小的数组时,它会Thread 1: Fatal error: Index out of range
因在线错误而崩溃Text(elements[$0])
。
我的代码是这样的:
有没有办法达到预期的结果?
swiftui - @State var 不存储值
我的目标是在视图之间传递值,从选择器到主题编辑器。当用户按下一个图标时,我正在保存我想要传递的对象,然后使用sheet
和传递新创建的视图以及@State var
.
分配已成功完成@State var themeToEdit
,但它是nil
在ThemeEditor
视图中创建时sheet
我究竟做错了什么?