- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用中有一个初始 View ,需要打开一些模态视图。我正在使用的数据是核心数据,我正在使用 @FetchedRequest
填充 ListView 属性包装器。我尝试制作的 UI 类似于您在 iOS 13 的提醒应用中创建和编辑列表的方式。
onAppear()
未调用附加到 View 。在这种情况下,文本字段使用的@State 变量永远不会用记录中的值填充,因为不会再次调用文本字段代码。我不知道如何处理这个问题。在任何其他环境中,我只会删除实例并创建一个新实例,但我不知道如何删除模式创建的编辑 View 的缓存实例。
import SwiftUI
struct TimelineListView: View {
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(fetchRequest: Timeline.allTimelinesFetchRequest()) var timelines: FetchedResults<Timeline>
@State var listViewEditMode: EditMode = .inactive
@State var openModalSheetAdd = false
@State var openModalSheetEdit = false
@State var timelineToEdit: Timeline?
var body: some View {
VStack{
NavigationView {
VStack {
List(self.timelines) { timeline in
NavigationLink(destination: TimelineDetailView(timeline: timeline)) {
HStack{
Text(timeline.name ?? "Unnamed List")
if (self.listViewEditMode == .active) {
Spacer()
Image(systemName: "info.circle")
.onTapGesture {
self.timelineToEdit = timeline
self.listViewEditMode = .inactive
self.openModalSheetEdit = true
}
}
}
} // End Navigation Link
} // End List
HStack {
Spacer()
Button("Add List") {
self.openModalSheetAdd = true
}.padding(EdgeInsets(top: 0, leading: 0, bottom: 10, trailing: 20))
}
}
.navigationBarTitle(Text("Lists"), displayMode: .inline)
.navigationBarItems(trailing: EditButton())
.environment(\.editMode, self.$listViewEditMode)
}// End Navigation View
// Edit modal
Text("").hidden()
.sheet(isPresented: $openModalSheetEdit,
onDismiss: {
self.openModalSheetEdit = false
},
content: {
TimelineEditView(timeline: self.timelineToEdit, onDismiss: {
self.openModalSheetEdit = false // this is here because sometimes onDismiss is not called.
})
.environment(\.managedObjectContext, self.managedObjectContext)
})
// Add modal
Text("").hidden()
.sheet(isPresented: $openModalSheetAdd,
onDismiss: {
self.openModalSheetAdd = false
},
content: {
TimelineAddView(onDismiss: {
self.openModalSheetAdd = false // this is here because sometimes onDismiss is not called.
})
.environment(\.managedObjectContext, self.managedObjectContext)
})
}
}
}
struct TimelineAddView: View {
@Environment(\.managedObjectContext) var managedObjectContext
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
@State private var nameEdit: String = ""
// This closure is here to call when we dismiss the modal because onDismiss is not always called
var onDismiss: () -> ()
var body: some View {
VStack {
HStack {
Button(action: ({
self.nameEdit = ""
self.presentationMode.wrappedValue.dismiss()
self.onDismiss()
})) {
Text("Cancel")
}
.padding(EdgeInsets(top: 10, leading: 10, bottom: 0, trailing: 0))
Spacer()
Button(action: ({
let newTimeline = Timeline(context: self.managedObjectContext)
newTimeline.name = self.nameEdit
self.nameEdit = ""
do {
try self.managedObjectContext.save()
} catch {
print(error)
}
self.presentationMode.wrappedValue.dismiss()
self.onDismiss()
})) {
Text("Done")
}
.padding(EdgeInsets(top: 10, leading: 0, bottom: 0, trailing: 10))
}
TextField("Data to edit", text: self.$nameEdit)
.shadow(color: .secondary, radius: 1, x: 0, y: 0)
.textFieldStyle(RoundedBorderTextFieldStyle())
.onAppear {
self.nameEdit = ""
}.padding()
Spacer()
}
}
}
struct TimelineEditView: View {
@Environment(\.managedObjectContext) var managedObjectContext
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
@State private var nameEdit = ""
var timeline : Timeline?
// This closure is here to call when we dismiss the modal because onDismiss is not always called
var onDismiss: () -> ()
var body: some View {
return VStack {
HStack {
Button(action: ({
// Dismiss the modal sheet
self.nameEdit = ""
self.presentationMode.wrappedValue.dismiss()
self.onDismiss()
})) {
Text("Cancel")
}
.padding(EdgeInsets(top: 10, leading: 10, bottom: 0, trailing: 0))
Spacer()
Button(action: ({
self.timeline?.name = self.nameEdit
do {
try self.managedObjectContext.save()
} catch {
print(error)
}
// Dismiss the modal sheet
self.nameEdit = ""
self.presentationMode.wrappedValue.dismiss()
self.onDismiss()
})) {
Text("Done")
}
.padding(EdgeInsets(top: 10, leading: 0, bottom: 0, trailing: 10))
}
TextField("Data to edit", text: self.$nameEdit)
.shadow(color: .secondary, radius: 1, x: 0, y: 0)
.textFieldStyle(RoundedBorderTextFieldStyle())
.onAppear {
self.nameEdit = self.timeline?.name ?? ""
}.padding()
Spacer()
}
}
}
最佳答案
.sheet
嵌入到 List
中只打开一次是一个已知的错误,我希望他们修复它。在那之前你必须搬家.sheet
在任何 List
之外.
但自从 .sheet
不在 List
内但在 NavigationView
内, 尝试移动 .sheet
可能是个好主意在它之外。
但是不要附两个.sheet
两个相同的 View ,但按以下方式添加它们:
VStack{
NavigationView{ ... }
Text("").hidden().sheet(...)
Text("").hidden().sheet(...)
}
关于表单修饰符的 SwiftUI 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57631666/
SQL FMDB 的修饰符在哪里描述?特别是,如何在要插入的字符串中放置引号。比如我想将名称“Mac's Place”插入数据库?谢谢 最佳答案 如果在 SQL 中使用 executeUpdate 和
我读过 article在 MSDN 上。它解释了为什么“in”应该只与自定义只读结构一起使用,否则会有性能损失。但是,我不太明白如何对原始类型使用“in”。由于 C# 中的所有内置值类型都是不可变的,
“__printflike__ 修饰符”到底是什么?这个词是什么意思? 最佳答案 据推测,它会告诉编译器您正在使用的函数接受格式为 [anything, ] format, ... 的参数,其中 fo
我在 VS2010 上使用 ReSharper 插件,我正在生成一个接口(interface)方法。ReSharper 在参数名称上放置一个 @。那是做什么用的? int Count(Func @wh
我在写小偷中用了大量的正则,所以在接下来的版本中要逐步减少正则的应用 在PHP正则表达式中需要转义的字符如下: $^*()+={}[]|/:<>.?'" 注意:perl风
http://msdn.microsoft.com/en-us/library/435f1dw2.aspx public class Base { public string Field; }
根据scala-wartremover静态分析工具我必须将“final”放在我创建的每个案例类前面:错误消息显示“案例类必须是最终的”。 根据scapegoat (Scala 的另一个静态分析工具)相
在 tcsh 中,我可以通过以下方式从路径末尾提取第二个路径元素 cd /some/long/directory/structure/path/ set x=`pwd` echo ${x:h:h:t}
我找到了很多 SwiftUI 教程,其中修饰符 .resizable() 用于图像。它似乎不再适用于带有 Swift 5 的 Xcode 13.3.1。 导入了 SwiftUI。如果您自己键入整个修饰
我已经设置好了音频播放器 除了步进器的当前功能外,我还想为 onIncrement 和 onDecrement 播放单独的声音。 这个项目使用核心数据来持久化。 $estimatorData.qty
来自 linux 内核脚本/mod/modpost.c: static int is_vmlinux(const char *modname) { const char *myname;
我刚刚遇到了一个BNF Grammar for JAVA 。其中,“修饰符”有一个称为“threadsafe”的终结符号。但是,我以前从未见过它,也无法在《Java 语言规范》Java SE 7 版
我创建了一个脚本,它将我组中的所有帖子嵌入到我的网站上。为此,我必须知道所有可能的修饰符“附件”类型。 现在我知道,那个类型可以是: 分享, video_share_youtube。 但我不知道在哪里
在 tcsh 中,我可以通过以下方式从路径末尾提取第二个路径元素 cd /some/long/directory/structure/path/ set x=`pwd` echo ${x:h:h:t}
我找到了很多 SwiftUI 教程,其中修饰符 .resizable() 用于图像。它似乎不再适用于带有 Swift 5 的 Xcode 13.3.1。 导入了 SwiftUI。如果您自己键入整个修饰
我正在编写一个代表一些简单几何形状的 Java 类。 最上面abstract类(它本身是包私有(private))我已经声明了需要从同一包中的子类访问的属性。 如果我将属性声明为 final在 Abs
我已经设置好了音频播放器 除了步进器的当前功能外,我还想为 onIncrement 和 onDecrement 播放单独的声音。 这个项目使用核心数据来持久化。 $estimatorData.qty
明确地说,我是 不是 询问如何使用 ViewModifier 协议(protocol)来创建一个带有 body 函数的结构,然后可以使用它来修改 View 。这个问题有点不同。 我正在尝试创建 Nav
我有一个内部类,用于存储我用于游戏的控件的信息,现在我想在其中存储一个静态 ArrayList,其中包含所有控件的名称。但我收到此错误:“修饰符 static 只允许在常量变量声明中” private
public class This_testing { int x,y; public This_testing(int x,int y){ //Why modifier void
我是一名优秀的程序员,十分优秀!