问题标签 [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 - 如何将 @State 绑定传递给自定义容器的 Content 闭包?
我开始使用自定义容器,但我一直在尝试发送 @State var。示例代码:
这个想法是调用站点将呈现内容并提供切换isShowing
var 的机制。基本原理是允许调用站点决定哪个手势或 UI 元素控制切换:
问题:我Cannot call value of non-function type 'Binding<() -> ()>
在上面的两isShowing.toggle()
行中得到一个。我不确定为什么。有任何想法吗?
swift - 如何在 SwiftUI 中使用 @State 和 fullScreenCover 在视图之间切换
我试图弄清楚如何在 SwiftUI 中使用 @State 和 fullScreenCover 在视图之间切换
我有一个主视图和 2 个简单视图(View1
和View2
)。View1
必须在点击"Show view 1"
按钮时以及View2
在按钮上键入时"Show view 2"
打开。我还@State
为此创建了 2 个变量,并使用.View1
(ActiveFullscreenview
枚举)对其进行了初始化:
问题是View1
即使我点击Show view 2
按钮它也会不断显示。我认为当点击按钮并给 activeFullscreenView 变量赋值时.View2
,它应该更改变量并显示fullScreenView
.
我想这是因为我调用了showFullscreenView
它并且它改变了变量,然后默认值是.View1
所以它没有改变它。
也试过这个:
第二个假设是我不应该给这个变量初始值。但在这种情况下,它添加了一些不方便的额外初始化代码:
目前,我有以下代码存在所描述的问题:
任何与解决问题有关的帮助表示赞赏。关于如何实现使用 fullscreenCover 显示单独视图的相同结果的便捷方法表示赞赏。
使用 Xcode 12.4,最新的 iOS 14
swiftui - SwiftUI:没有奇怪的解决方法,@State 属性不会更新
我遇到了 @State 属性的奇怪行为,该属性在另一个视图中更改后未在其原始视图中正确更新。我正在使用 Xcode 12.3 和 iOS 14。
发生的情况是@State“会话”基于值的项目和@State“流”基于值的项目作为绑定参数发送到另一个视图。当在那里点击一个按钮时,它会更改它们的值,并且原始视图中的 fullScreenCover 调用应该从 switch 语句中获得正确的视图以显示在流中的下一个视图。但是,除非我包含一个 onChange 修饰符来查找两个 @State 属性中的任何一个中的更改,否则该 switch 语句中的“会话”项是 nil。onChange 调用不必包含任何代码即可产生此效果。
我对 SwiftUI 还是比较陌生(尽管在 iOS 和 Mac 开发方面经验丰富)。但这让我很困惑。我不明白为什么它没有按预期工作,也不明白为什么添加一个空的 onChange 处理程序使其工作。
如果您想亲自体验一下,这里是组装一个简单演示项目的代码:
swiftui - SwiftUI State var 数组不更新子视图
出于某种原因,我不明白,当我从 a 添加/删除项目@State var
时MainView
,OutterView
s 没有正确更新。
我想要实现的是用户一次只能“标记”(选择)一个项目。例如,当我点击“item #1”时,它会被标记。如果我单击另一个项目,则“项目 #1”将不再被标记,而只会标记我刚刚单击的新项目。
目前,我的代码显示所有项目,就好像它们已被标记一样,即使它们不再存在。以下代码具有我为MainView
、OutterView
和实现的最小结构和功能InnerView
。
我尝试使用State var
s 而不是 in 中的计算属性OutterView
,但它不起作用。另外,我尝试使用 avar
而不是计算属性 inOutterView
并将其初始化,init()
但也不起作用。
希望你能帮助我找出我做错了什么。谢谢!
swiftui - Swift UI @State 确实在第一次点击时设置
我有一个自定义视图的简单列表。What needs to happen is when one of the items are selected it needs to show the detail view for that item. 在我的代码中,当我第一次选择一个项目时,@Statet selectedListener 没有设置,因此详细视图不会出现。如果我继续选择先前选择的相同项目,则行为保持不变。但是,如果我选择不同的项目,它可以正常工作,我可以返回上一个项目并查看其详细视图而不会出现问题。这是我想做的一件简单的事情,只是无法弄清楚我可能做错了什么。任何帮助,将不胜感激。谢谢你。
}
ios - 嵌入在 UIViewController 中的 UIHostingController - 如何从外部更新 @State?
我正在使用 aUIHostingController
嵌入其中ContentView
。当按下“更改名称”按钮时,ViewController
我想更改ContentView
's的名称。name
这是我的代码:
结果:
问题是,即使func updateLastCardName(name: String) {
被调用,当我设置时self.name = name
也没有变化。Text
继续显示“名称”,而不是“更新的名称” 。
我已经读过@State
应该是 local,所以我尝试使用该updateLastCardName
功能解决这个问题。但是,它不起作用。我的方法错了吗?
如何更新来自ContentView
?name
ViewController
swiftui - 让 SwiftUI Picker() 选择更新应用程序状态更改的最佳方法是什么?
我正在尝试使用 SwiftUI 制作一个 UI,其中列出了可以是不同种类并且可以更新的东西的集合。我想使用 Picker 在 UI 中设置类型,并且我还希望在以其他方式修改项目时更新视图(例如,从 UI 的另一部分或通过网络)。
我喜欢“redux”风格的设置,我不想放弃它。
这是一个简单的示例,它显示了两个项目,每个项目都有一个“随机化”按钮,可以随机更改项目,还有一个 Picker,可以让您选择新的项目类型。后者按预期工作:Picker
更改@State var
,商店更新等。“随机化”按钮更新商店和let
属性标签,但@State
和Picker
不更新。
我很想得到一些关于让这个以我想要的方式工作的好方法的建议。
ios - SwiftUI 模型绑定仅在第一次通过时更新值
我正在尝试使用 SwiftUI 创建一个表单框架。现在,我正在保存我的 FormFieldModels 的字典,以保存有关该字段是否需要、它是什么类型的字段(文本、复选框、电话等)及其值的信息。我对 SwiftUI 的经验并不丰富,但我正在尝试将字段绑定到自定义文本字段视图/复选框(最终将是更多字段选项),并从那里使用包含在字段中的值来确定状态。
由于我不完全理解的原因,只有任何字段(无论是文本字段还是切换按钮)的第一次更新有效,然后其余字段不更新主 ContentView 的状态(尽管他们的新值被正确传递,只是没有坚持)。
编码:
在其中一个文本字段中键入时,程序会打印以下内容。如您所见,仅保留键入的第一个字母:
任何提示表示赞赏。我确定我在这里误解了有关 @State 或 Binding 的一些内容,这导致了混乱。谢谢
swift - 无法通过 SwiftUI 中的 @State 绑定变量切换视图
我试图在视图文件之间传递一个状态变量以便在视图之间导航,但它似乎不起作用。按下注册按钮时会更新“视图”变量,但不会更改视图。这是我目前如何实现它的简化版本:
登录视图
注册查看
swiftui - 为什么即使列表已正确更新,上下文菜单仍显示旧状态?
我面临一个问题,即显示Context Menu
的数据显示错误,即使List
下面显示正确的数据。问题是一旦在第一项的上下文菜单上触发操作,您将看到List
重新呈现并显示正确数据的方式,但如果您再次为第一项触发上下文菜单,它将不会显示正确的状态。如果您打开第二个项目的上下文菜单,它将显示正确的状态,但如果您现在选择“Two”,并打开相同的上下文菜单,State
则将是错误的(当它应该显示时它只会显示 1 selected 1 & 2,喜欢List
它的显示)。
感觉就像是一个错误(就像呈现以前的状态而不是最新的状态),我不确定这只是一个错误还是我使用错误。
这是重现该问题的代码片段:
演示该问题的视频:https ://twitter.com/xmollv/status/1412397838319898637
谢谢!
编辑:
这似乎是 iOS 15 的回归(至少在候选版本上),它在 iOS 14.6 上运行良好。