Questions tagged «swiftui»

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

14
在SwiftUI中有条件地使用视图
我正在尝试找出正确的方法来有条件地包含swiftui视图。我无法if直接使用视图的内部,而不得不使用堆栈视图来做到这一点。 这可行,但似乎会有更清洁的方法。 var body: some View { HStack() { if keychain.get("api-key") != nil { TabView() } else { LoginView() } } }
79 swift  swiftui 

13
SwiftUI:如何使TextField成为第一响应者?
这是我的SwiftUI代码: struct ContentView : View { @State var showingTextField = false @State var text = "" var body: some View { return VStack { if showingTextField { TextField($text) } Button(action: { self.showingTextField.toggle() }) { Text ("Show") } } } } 我想要的是当文本字段变为可见时,使文本字段成为第一响应者(即获得焦点并弹出键盘)。


4
NavigationLink只工作一次
我正在使用登录名处理应用程序,登录后列出了类别。在每个类别下,都有一些水平列出的项目。事情是登录后,出现主页,所有内容都列出了。当您单击某个项目时,它会进入详细屏幕,但是当您尝试返回时,它就会崩溃。我发现了这种流程,为什么在将`NavigationLink`放入`NavigationView`的`navigationBarItems`中后向后浏览时,我的SwiftUI应用程序为什么崩溃?但我无法解决我的问题。由于我的项目变得复杂,我只想在swiftui中练习导航,然后创建了一个新项目。顺便说一下,我下载了最新的xcode版本11.3。我编写了一个简单的代码,如下所示: NavigationView{ NavigationLink(destination: Test()) { Text("Show Detail View") } .navigationBarTitle("title1") Test()视图如下: import SwiftUI struct Test: View { var body: some View { Text("Hello, World!") } } struct Test_Previews: PreviewProvider { static var previews: some View { Test() } } 如您所见,这确实很简单。我还在互联网上尝试过类似的示例,但是它不能像预期的那样工作。运行项目时,单击导航链接,然后导航到Test()视图。然后,单击“后退”按钮,它导航到主页。但是,当我第二次单击导航链接时,没有任何反应。导航链接仅工作一次,此后什么也没有发生。它不会导航,它不会抛出任何错误。我是swiftui的新手,除了导航之外,其他所有方面都很出色。我在互联网上尝试了许多示例并提出了解决方案,但似乎没有什么可以解决我的问题。

2
SceneDelegate和AppDelegate之间的区别
在我的SwiftUI项目中,我同时看到AppDelegate文件和SceneDelegate文件。 它们之间有什么区别? 例如在方法之间 SceneDelegate scene(_:willConnectTo:options:) 并在 AppDelegate application(_:didFinishLaunchingWithOptions:)
74 swift  swiftui 

9
在将“ NavigationLink”放入“ NavigationView”中的“ navigationBarItems”内部后,为什么向后导航时我的SwiftUI应用会崩溃?
最小的可重现示例(Xcode 11.2 beta,在Xcode 11.1中有效): struct Parent: View { var body: some View { NavigationView { Text("Hello World") .navigationBarItems( trailing: NavigationLink(destination: Child(), label: { Text("Next") }) ) } } } struct Child: View { @Environment(\.presentationMode) var presentation var body: some View { Text("Hello, World!") .navigationBarItems( leading: Button( action: { self.presentation.wrappedValue.dismiss() }, …

6
SwiftUI-如何避免将导航硬编码到视图中?
我尝试为更大的,可投入生产的SwiftUI App做架构。我一直在遇到一个相同的问题,这表明SwiftUI的一个主要设计缺陷。 仍然没有人能给我完整的工作,生产就绪的答案。 如何在SwiftUI其中包含导航的可重用视图? 由于SwiftUI NavigationLink牢固地绑定在视图上,因此根本不可能在较大的Apps中进行缩放。NavigationLink是的,在这些小样本应用程序中可以工作-是的,但是当您要在一个应用程序中重用许多视图时就不会立即使用。并且可能还会在模块边界上重用。(例如:在iOS,WatchOS等中重用View) 设计问题:NavigationLinks硬编码到视图中。 NavigationLink(destination: MyCustomView(item: item)) 但是,如果包含此视图的视图NavigationLink应该可重用,则无法对目的地进行硬编码。必须有一种提供目的地的机制。我在这里问这个问题,得到了很好的答案,但仍然没有完整的答案: SwiftUI MVVM协调器/路由器/ NavigationLink 想法是将目标链接注入到可重用视图中。通常,此想法可行,但不幸的是,这并不适合实际的Production Apps。一旦有了多个可重复使用的屏幕,我就会遇到一个逻辑问题,即一个可重复使用的视图(ViewA)需要一个预先配置的视图目标(ViewB)。但是,如果ViewB还需要预配置的视图目标该ViewC怎么办?我需要建立ViewB在这样的方式已经ViewC被注入已经ViewB在我注入ViewB到ViewA。依此类推....但是由于当时必须传递的数据不可用,整个构造失败了。 我的另一个想法是使用Environmentas依赖项注入机制为注入目标NavigationLink。但是我认为,这或多或少应被视为一种骇客行为,而不是针对大型应用程序的可扩展解决方案。我们最终将基本上将环境用于所有内容。但是因为Environment也只能在View内部使用(不能在单独的Coordinators或ViewModels中使用),所以我认为这将再次创建奇怪的构造。 就像业务逻辑(例如,视图模型代码)和视图一样,导航和视图也必须分开(例如,协调器模式)。UIKit这是有可能的,因为我们可以访问视图UIViewController并UINavigationController在视图后方进行访问。UIKit'sMVC已经存在一个问题,即它混和了许多概念,因此变成了有趣的名称“ Massive-View-Controller”而不是“ Model-View-Controller”。现在,类似的问题仍在继续,SwiftUI但在我看来甚至更糟。导航和视图是紧密耦合的,不能分离。因此,如果包含导航,则无法进行可重用的视图。可以解决这个问题,UIKit但是现在我看不到一个理智的解决方案SwiftUI。不幸的是,Apple没有向我们提供如何解决类似架构问题的解释。我们只有一些小示例应用程序。 我希望证明自己是错误的。请给我展示一个干净的App设计模式,该模式可以解决大量生产就绪的Apps的问题。 提前致谢。 更新:悬赏活动将在几分钟后结束,很遗憾,仍然没有人能够提供有效的示例。但是,如果找不到其他解决方案并将其链接到此处,我将开始提供新的赏金来解决此问题。感谢大家的巨大贡献!

5
多个工作表(isPresented :)在SwiftUI中不起作用
我的ContentView具有两个不同的模式视图,因此我都使用sheet(isPresented:)了这两种视图,但似乎只显示了最后一个。我该如何解决这个问题?还是无法在SwiftUI的视图上使用多个图纸? struct ContentView: View { @State private var firstIsPresented = false @State private var secondIsPresented = false var body: some View { NavigationView { VStack(spacing: 20) { Button("First modal view") { self.firstIsPresented.toggle() } Button ("Second modal view") { self.secondIsPresented.toggle() } } .navigationBarTitle(Text("Multiple modal view problem"), displayMode: .inline) .sheet(isPresented: $firstIsPresented) { …

2
催化剂“ SwiftUI.AccessibilityNode”不是已知的可序列化元素
我使用Xcode 11.1创建了一个新的iOS单页应用程序(包括SwiftUI),并启用了Mac Catalyst。在Mac(当然是macOS 10.15)上运行新的Project之后,在窗口上点击一次后,出现以下错误。 2019-10-18 12:59:48.479186+0200 test[3130:122148] Metal API Validation Enabled 2019-10-18 12:59:50.960734+0200 test[3130:122148] [AXRuntimeCommon] Unknown client: test 2019-10-18 12:59:50.962261+0200 test[3130:122148] [AXRuntimeCommon] This class 'SwiftUI.AccessibilityNode' is not a known serializable element and returning it as an accessibility element may lead to crashes 2019-10-18 12:59:51.313 test[3130:122148] **************_____________**************AXError: AVPlayerView is not a …

4
等同于在Swift Combine中使用@Published的计算属性?
在命令式Swift中,通常使用计算属性在不复制状态的情况下提供对数据的便捷访问。 假设我将此类用于命令式MVC: class ImperativeUserManager { private(set) var currentUser: User? { didSet { if oldValue != currentUser { NotificationCenter.default.post(name: NSNotification.Name("userStateDidChange"), object: nil) // Observers that receive this notification might then check either currentUser or userIsLoggedIn for the latest state } } } var userIsLoggedIn: Bool { currentUser != nil } // …

2
在SwiftUI中无法两次选择同一行
我有一个包含多个部分和行的导航列表。我选择一行foo,它会导航到我想要的视图。但是,当我回到根视图时,无法选择foo行。我点击第foo行,没有任何反应。 我点击行栏,该行将我发送到其视图。返回到根视图。然后,我无法选择行栏,但是现在行foo起作用了。 这是SwiftUI中的错误还是设计的行为?离开视图时,我需要做些什么来重置视图吗? NavigationView { List { Section(header: shoppingListData.lastItemSection.sectionHeader, footer: shoppingListData.lastItemSection.sectionFooter) { ForEach(0..<shoppingListData.lastItemSection.sectionRows.count) { index in ShoppingItemRow(shoppingListData: self.shoppingListData, rowItem: self.shoppingListData.lastItemSection.sectionRows[index]) } } } } 这是另一个有相同问题的情况。我只能选择一次表单的选择器行。如果返回到根视图,然后再次返回到该视图,则可以再次选择选择器。 如果将pickerStyle设置为SegmentedPickerStyle(),则可以多次选择它。 struct ShoppingItemPage: View { @ObservedObject var shoppingListData: ShoppingListData @ObservedObject var shoppingItem: ShoppingItems var body: some View { Form { Section(header: Text("Packages")) { HStack { …

3
如何告诉SwiftUI视图绑定到嵌套的ObservableObjects
我有一个SwiftUI视图,其中包含一个名为的EnvironmentObject appModel。然后读取值appModel.submodel.count在其body方法中。我希望这会将我的观点绑定到该属性count上,submodel以便在属性更新时重新呈现该属性,但这似乎不会发生。 这是一个错误吗?如果不是,将视图绑定到SwiftUI中环境对象的嵌套属性的惯用方式是什么? 具体来说,我的模型看起来像这样... class Submodel: ObservableObject { @Published var count = 0 } class AppModel: ObservableObject { @Published var submodel: Submodel = Submodel() } 我的观点看起来像这样... struct ContentView: View { @EnvironmentObject var appModel: AppModel var body: some View { Text("Count: \(appModel.submodel.count)") .onTapGesture { self.appModel.submodel.count += 1 } } } 当我运行该应用并点击标签时, …
18 ios  swift  swiftui  combine 

3
SwiftUI-如何将EnvironmentObject传递到视图模型中?
我正在寻找创建一个可以由视图模型(而不仅仅是视图)访问的EnvironmentObject。 Environment对象跟踪应用程序会话数据,例如,loginIn,访问令牌等,该数据将传递到视图模型(或需要的服务类)中,以允许调用API来传递来自此EnvironmentObjects的数据。 我试图将会话对象从视图传递给视图模型类的初始化程序,但出现错误。 如何使用SwiftUI将EnvironmentObject访问/传递到视图模型? 请参阅测试项目的链接:https : //gofile.io/?c=vgHLVx
16 ios  swift  mvvm  swiftui 

2
SwiftUI视图内容布局意外弹出/跳转出现?
当导航到具有表单或列表(分组)的新视图时,内容从导航视图标题的底部向下出现大约四分之一,然后大约半秒钟后“弹出”到正确的位置。非常难看。不知道这是SwiftUI错误还是结构错误? 我已经在模拟器和设备上对此进行了测试,结果相同。 我是否认为这与导航链接的处理方式有关?当ContentView出现时,每个导航链接都会在其目标视图上调用init()。对我而言,这没有任何意义,仅在用户实际单击导航链接时才应调用目标init()吗? 我也尝试过使用工作表进行工作,并且仅当使用具有链接样式或列表形式的列表的导航链接时,工作表才存在问题。 来自全新的单视图应用程序的代码: struct ContentView: View { var body: some View { NavigationView { NavigationLink(destination: TestView()) { Text("Test Link") } .navigationBarTitle("Content View") } } } struct TestView: View { var body: some View { Form { Text("Test View") } .navigationBarTitle("Test View") } }
16 ios  swift  swiftui 

3
SwiftUI中观察到的对象更改时如何禁用列表中的动画?
视图模型数据更改时如何禁用动画? 我有以下代码: struct FormView: View { @ObservedObject var viewModel: FormViewModel var body: some View { List { ForEach(viewModel.options) { option in Text(option.displayValue) } } } } 每次视图模型更改List都会使用动画进行更新。 如何禁用它? 我尝试添加,.animation(nil)但没有帮助
15 ios  swiftui 

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.