当前位置: 首页 > 面试题库 >

在回调,SwiftUI中以编程方式推送View

谈阎宝
2023-03-14
问题内容

在我看来,Apple鼓励我们放弃UIViewController在SwiftUI中使用,但如果不使用视图控件,我会觉得有些无能为力。我想要的是能够实现某种ViewModel将事件发送给的功能View

ViewModel

public protocol LoginViewModel: ViewModel {
  var onError: PassthroughSubject<Error, Never> { get }
  var onSuccessLogin: PassthroughSubject<Void, Never> { get }
}

查看

public struct LoginView: View {
  fileprivate let viewModel: LoginViewModel

  public init(viewModel: LoginViewModel) {
    self.viewModel = viewModel
  }

  public var body: some View {
    NavigationView {
      MasterView()
        .onReceive(self.viewModel.onError, perform: self.handleError(_:))
        .onReceive(self.viewModel.onSuccessLogin, perform: self.handleSuccessfullLogin)
    }
  }

  func handleSuccessfullLogin() {
    //push next screen
  }

  func handleError(_ error: Error) {
    //show alert
  }
}

使用SwiftUI,我不知道如何实现以下功能:

  • 如果登录成功,则推送另一个控制
  • 如果发生错误,则显示警报

此外,对于任何关于如何以更好的方式实现我想要的东西的建议,我也将不胜感激。谢谢。

更新1: 我能够显示警报,但仍然找不到如何在viewModel的回调中推送另一个视图


问题答案:

我找到了答案。如果要显示回调的其他视图,则应

1)创建状态 @State var pushActive = false

2)当ViewModel通知登录成功时,将其设置pushActivetrue

  func handleSuccessfullLogin() {
    self.pushActive = true
    print("handleSuccessfullLogin")
  }

3)创建隐藏NavigationLink并绑定到该状态

  NavigationLink(destination: ProfileView(viewModel: ProfileViewModelImpl()), isActive: self.pushActive) {
    Text("")
  }.hidden()


 类似资料:
  • 问题内容: 描述性示例: 登录屏幕,用户点击“登录”按钮,执行请求,UI显示等待指示器,然后在成功响应后,我想自动将用户导航到下一个屏幕。 如何在SwiftUI中实现这种自动转换? 问题答案: 成功登录后,可以使用登录视图替换下一个视图。例如: 您应该在数据模型中处理登录过程,并使用绑定(例如)传递到视图。 注意: 在Xcode中 11.0版测试4 ,以符合协议 “BindableObject”

  • 问题内容: 我有一个SwiftUI应用程序,它将具有一个浮动播客播放器,类似于位于选项卡栏上方的Apple Music播放器,并且在播放器运行时在所有选项卡和视图中均保持不变。我还没有找到一种好的方法来放置播放器,使其处于Tab栏上方,因为Tab栏的高度随设备而异。我发现的主要问题是如何将播放器放置在应用程序根视图中的叠加层或ZStack中,而不是在TabView本身中。由于我们无法自定义TabV

  • 问题内容: 作为单元测试的一部分,我想调用限于错误信号部分的pylint检查器。因此我检查了pylint可执行脚本,进入了helper类,在那里我迷失了一个很长的函数,最后以调用。 有人尝试过并设法这样做吗? 梦想计划是这样的: 有什么提示吗?除了“复制方法并跳过”之外,我的意思是? 我并不 需要 通过运行测试,它也可能是或其他软件:随时提出替代方案。谢谢! 问题答案: 看一下,其中包含以编程方式

  • 我可以从Firebase控制台向单个设备、主题和用户段发送通知。 我想向用户段发送推送通知。我搜索了很多,但我只得到脚本发送通知给单个用户或主题,而不是用户段。 我试过下面的代码 下面是我的回答

  • 问题内容: 我找不到有关使用SwiftUI 以* 编程 方式 弹出 或 关闭 所显示视图的任何方式的任何参考。 * 在我看来,唯一的方法是对模式使用已经集成的幻灯片dow操作(以及是否/如何禁用此功能?),以及对导航堆栈使用后退按钮。 有人知道解决方案吗?您知道这是一个错误还是会一直保持这种状态? 问题答案: 本示例使用Beta 5版本说明中记录的新环境var,该环境使用了value属性。在更高的

  • 问题内容: 我将用户带到单击按钮的页面上。此页面是 UITableViewController 。 现在,如果用户点击一个单元格,我想将他推回到上一页。 我想到了类似的东西,但这似乎是个坏主意。 正确的方法是什么? 问题答案: 斯威夫特3: 如果您想回到上一个视图控制器 如果要返回到根视图控制器