Questions tagged «swiftui»

SwiftUI是Apple的用于定义图形用户界面的声明性Swift API。在任何平台上使用此标签来查询有关SwiftUI的问题。

1
在SwiftUI中将核心数据实体保存在弹出窗口中会抛出nilError,而不会再次将.environment传递给SubView
SwiftUI和Core Data的“玩法”使我陷入一个奇怪的问题。因此,情况如下: 我有一个主视图“ AppView”和一个名为“ SubView”的子视图。如果我单击NavigationTitleBar中的加号按钮(即弹出窗口或工作表),将从AppView视图中打开SubView视图。 @Environment(\.managedObjectContext) var managedObjectContext @State private var modal: Bool = false ... Button(action: { self.modal.toggle() }) { Image(systemName: "plus") }.popover(isPresented: self.$modal){ SubView() } SubView视图的形式有点小,带有两个TextField对象,用于添加一个姓氏和一个姓氏。这两个对象的输入由两个单独的@State属性处理。此表单中的第三个对象是简单按钮,该按钮应将前名和姓氏保存到附加的CoreData客户实体中。 ... @Environment(\.managedObjectContext) var managedObjectContext ... Button(action: { let customerItem = Customer(context: self.managedObjectContext) customerItem.foreName = self.forename customerItem.surname = self.surname do { try self.managedObjectContext.save() …
15 ios  swift  core-data  swiftui 

2
SwiftUI中相关实体更改时,如何更新@FetchRequest?
在SwiftUI中,View我有一个List基于@FetchRequest显示Primary实体数据和关联Secondary实体的Via 关系的数据。在View其List被正确地更新,当我添加一个新的Primary实体,新的相关辅助实体。 问题是,当我Secondary在详细视图中更新连接的项目时,数据库得到更新,但是更改未反映在Primary列表中。显然,@FetchRequest不会被另一个视图中的更改触发。 此后,当我在主视图中添加新项目时,以前更改的项目最终得到更新。 解决方法是,我另外Primary在详细视图中更新实体的属性,并且更改正确传播到Primary视图。 我的问题是:如何@FetchRequests在SwiftUI核心数据中强制所有相关的更新?特别是当我无权直接访问相关实体时@Fetchrequests? import SwiftUI extension Primary: Identifiable {} // Primary View struct PrimaryListView: View { @Environment(\.managedObjectContext) var context @FetchRequest( entity: Primary.entity(), sortDescriptors: [NSSortDescriptor(key: "primaryName", ascending: true)] ) var fetchedResults: FetchedResults<Primary> var body: some View { List { ForEach(fetchedResults) { primary in NavigationLink(destination: SecondaryView(primary: primary)) { VStack(alignment: …

4
为什么导航后表单中的SwiftUI选择器会重新定位?
单击选择器后,它将导航到选择视图。项目列表的渲染距离顶部太远,但是在动画结束后会迅速对齐。为什么会这样呢? 演示:https : //gfycat.com/idioticdizzyazurevase 我已经创建了一个最小的示例来排除导航栏标题和按钮,表单部分以及其他详细信息: import SwiftUI struct NewProjectView: View { @State var name = "" var body: some View { NavigationView { Form { Picker("Client", selection: $name) { Text("Client 1") Text("Client 2") } } } } } struct NewProjectView_Previews: PreviewProvider { static var previews: some View { NewProjectView() } …
12 ios  forms  swiftui  picker 

1
使用SwiftUI的MacOS中的多列TableView
我已经对SWiftUI进行了一些实验,似乎根本找不到关于如何使用SWiftUI来创建多列TableView的任何信息,就像在NSTableView中一样。我设法找到的所有示例都显示一列数据。Apple的文档甚至指定SwiftUI列表结构用于数据行的单列显示。对于MacOS上的应用程序来说,这是一个非常基本的数据结构,但在任何地方似乎都没有提到它! 有人可以阐明这一点吗?我想它还没有准备好,但是还…。
12 macos  swiftui 

3
SwiftUI:自动预览更新一直暂停
我有一个现有的应用程序,基本上是一个购物清单应用程序,我正在尝试向其中添加一些甜美的SwiftUI。 我的问题是实时预览更新无法正常工作-不断显示“自动预览更新已暂停”警告。我点击了恢复按钮,它构建了应用程序,显示了当前视图,并且该警告立即再次显示。如果不使用“恢复”按钮,我将永远看不到对画布中反映的代码所做的更改。 这是在Xcode 11.1和11.2 beta 2中发生的。我在SO上几乎找不到其他提及,Apple的Dev论坛上有一个线程没有答案。
12 xcode  swiftui 

3
在SwiftUI中呈现新视图
我想单击一个按钮,然后像present modally在UIKit中 一样呈现一个新视图 我已经看过“ 如何使用图纸呈现新视图 ”,但是我不想将其作为模式图纸附加到主视图。 而且我不想使用NavigationLink,因为我不希望新视图和旧视图具有导航关系。 谢谢你的帮助...
11 ios  swiftui 

3
SwiftUI:如何处理点击和长按按钮?
我在SwiftUI中有一个按钮,我希望能够对“轻击按钮”(正常单击/轻击)和“长按”采取不同的操作。 在SwiftUI中有可能吗? 这是我现在拥有的按钮的简单代码(仅处理“常规”轻触/触摸盒)。 Button(action: {self.BLEinfo.startScan() }) { Text("Scan") } .disabled(self.BLEinfo.isScanning) 我已经尝试添加“ longPress手势”,但是它仍然只能“执行”“正常/短”点击。这是我尝试的代码: Button(action: {self.BLEinfo.startScan() }) { Text("Scan") .fontWeight(.regular) .font(.body) .gesture( LongPressGesture(minimumDuration: 2) .onEnded { _ in print("Pressed!") } ) } 谢谢! 杰拉德

1
期望SwiftUI DynamicProperty属性包装器的内部更新触发视图更新是否正确?
我正在尝试创建SwiftUI支持的自定义属性包装器,这意味着对相应属性值的更改将导致对SwiftUI视图的更新。这是我所拥有的简化版本: @propertyWrapper public struct Foo: DynamicProperty { @ObservedObject var observed: SomeObservedObject public var wrappedValue: [SomeValue] { return observed.value } } 我看到,即使my ObservedObject包含在我的自定义属性包装器中,SwiftUI仍然可以捕获更改,SomeObservedObject只要: 我的属性包装器是一个结构 我的属性包装器符合 DynamicProperty 不幸的是,文档稀疏,我很难说这是否只能通过当前的SwiftUI实现运气。 DynamicProperty(在Xcode中,不在在线中)的文档似乎表明这种属性是从外部更改的属性,导致视图重绘,但是无法保证将自己的类型与该协议兼容时会发生什么。 我可以期望它在以后的SwiftUI版本中继续工作吗?

1
如何在SwiftUI中检测右键?
我正在编写一个简单的Mines应用程序,以帮助我了解SwiftUI。因此,我希望主要点击(通常是LMB)“挖”(揭示那里是否有矿井),以及希望次要点击(通常是人民币)来标记。 我正在挖掘工作!但是我不知道如何放置标记,因为我不知道如何检测辅助点击。 这是我正在尝试的: BoardSquareView( style: self.style(for: square), model: square ) .gesture(TapGesture().modifiers(.control).onEnded(self.handleUserDidAltTap(square))) .gesture(TapGesture().onEnded(self.handleUserDidTap(square))) 正如我前面所暗示的,handleUserDidTap单击时可以正确调用by返回的函数,但是handleUserDidAltTap只有在按住Control键时才能调用by 返回的函数。这是有道理的,因为这就是代码的意思……但是我看不到任何可以让其注册第二次点击的API,因此我不知道该怎么办。 我也尝试过此方法,但行为似乎相同: BoardSquareView( style: self.style(for: square), model: square ) .gesture(TapGesture().modifiers(.control).onEnded(self.handleUserDidAltTap(square))) .onTapGesture(self.handleUserDidTap(square))

1
尝试重新访问SwiftUI中先前单击的NavigationLink时,NavigationLink冻结
我正在设计一个应用程序,该应用程序包括检索JSON数据并在FileBrowser类型视图中显示检索到的项目的列表的功能。在此视图中,用户应该能够单击文件夹以更深入地进入文件树,或者单击文件以查看有关该文件的一些元数据。 我观察到,在这种情况下,当我单击文件或文件夹然后再次单击并单击它时,不会触发NavigationLink,并且在单击其他导航链接之前,我一直停留在视图上。 这是展示此问题的gif文件。 如此处所示,当我单击BlahBlah时,我正在激活NavigationLink并转到BlahBlah,然后当我向后导航并尝试重新导航至BlahBlah时,它变成灰色,表明我单击了它……但从未将我带到那里。单击TestFile可以解决此问题,并允许我导航回BlahBlah。 列表项由以下结构组成 private struct FileCell{ var FileName: String var FileType: String var FileID: String = "" var isContainer: Bool } private struct constructedCell: View{ var FileType: String var FileName: String var FileID: String var body: some View { return HStack{ VStack(alignment: .center){ Image(systemName: getImage(FileType: FileType)).font(.title).frame(width: 50) } …

1
CoreData和SwiftUI:环境中的上下文未连接到持久性存储协调器
我正在尝试通过构建一个作业管理应用程序来自学核心数据。我的代码构建良好,并且该应用程序可以正常运行,直到我尝试向列表中添加新任务。我Thread 1: EXC_BREAKPOINT (code=1, subcode=0x1c25719e8)在以下行中收到此错误:ForEach(courses, id: \.self) { course in。控制台也有此错误:Context in environment is not connected to a persistent store coordinator: <NSManagedObjectContext: 0x2823cb3a0>。 我对Core Data知之甚少,对可能的问题不知所措。我已经在数据模型中设置了“任务”和“课程”实体,其中Course与“任务”具有一对多关系。每个作业将根据特定课程进行分类。 这是用于向列表添加新分配的视图的代码: struct NewAssignmentView: View { @Environment(\.presentationMode) var presentationMode @Environment(\.managedObjectContext) var moc @FetchRequest(entity: Course.entity(), sortDescriptors: []) var courses: FetchedResults<Course> @State var name = "" @State var hasDueDate …

4
SwiftUI ScrollView无法更新?
目标 获取要显示的数据 scrollView 预期结果 实际结果 另类 使用List,但不灵活(无法删除分隔符,不能有多列) 码 struct Object: Identifiable { var id: String } struct Test: View { @State var array = [Object]() var body: some View { // return VStack { // uncomment this to see that it works perfectly fine return ScrollView(.vertical) { ForEach(array) { o …
10 swiftui 

1
无法将类型“ Binding <Int>”的值转换为预期的参数类型“ Binding <_>”
我正在尝试TabView使用以下代码在SwiftUI中创建一个: @State var selection = 0 var body: some View { TabView(selection: $selection) { DataGridPage(type: "media").tabItem { Image(systemName: "photo.on.rectangle") .imageScale(.large) .foregroundColor(.yellow) } .tag(1) DataGridPage(type: "files").tabItem { Image(systemName: "doc.on.doc") .imageScale(.large) .foregroundColor(.yellow) } .tag(2) } } 但是我收到错误消息Cannot convert value of type 'Binding&lt;Int&gt;' to expected argument type 'Binding&lt;_&gt;'。我看到变量selection是整数,这是正确的类型,但是由于某些原因,警告仍然存在。
10 swiftui 

3
SwiftUI如何在View需要初始化器中的@Binding时实例化PreviewProvider
使用SwiftUI(Xcode 11.1),我已经通过2路绑定(使用@Binding)设置了一些视图。双向更新效果很好。 但是,如何从PreviewProvider实例化视图? 例如: struct AddProjectView: View { @Binding public var showModal: Bool var body: some View { return VStack { Text("Add Project View") Button("Dismiss") { self.showModal = false } } } } 我无法执行此操作,因为“ true”不是绑定: struct AddProjectView_Previews: PreviewProvider { static var previews: some View { AddProjectView(showModal: true) } } 我不能这样做,因为“ …
10 xcode  swiftui  combine 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.