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

以编程方式导航到SwiftUI中的新视图

施洛城
2023-03-14
问题内容

描述性示例

登录屏幕,用户点击“登录”按钮,执行请求,UI显示等待指示器,然后在成功响应后,我想自动将用户导航到下一个屏幕。

如何在SwiftUI中实现这种自动转换?


问题答案:

成功登录后,可以使用登录视图替换下一个视图。例如:

struct LoginView: View {
    var body: some View {
        ...
    }
}

struct NextView: View {
    var body: some View {
        ...
    }
}

// Your starting view
struct ContentView: View {

    @EnvironmentObject var userAuth: UserAuth

    var body: some View {
        if !userAuth.isLoggedin {
            LoginView()
        } else {
            NextView()
        }

    }
}

您应该在数据模型中处理登录过程,并使用绑定(例如)@EnvironmentObject传递isLoggedin到视图。

注意: 在Xcode中 11.0版测试4 ,以符合协议 “BindableObject”
willChange

属性已被添加

import Combine

class UserAuth: ObservableObject {

  let didChange = PassthroughSubject<UserAuth,Never>()

  // required to conform to protocol 'ObservableObject' 
  let willChange = PassthroughSubject<UserAuth,Never>()

  func login() {
    // login request... on success:
    self.isLoggedin = true
  }

  var isLoggedin = false {
    didSet {
      didChange.send(self)
    }

    // willSet {
    //       willChange.send(self)
    // }
  }
}


 类似资料:
  • 问题内容: 我一直在寻找这种解决方案已有一段时间,但是没有任何解决方案。例如一个解决方案是 此代码将添加带有“停止”图像的按钮。就像这样,还有其他解决方案,例如“搜索,刷新”等。但是 ,如果我想以编程方式在想要的图像上添加按钮,该怎么办? 问题答案: 自定义按钮图片,未设置按钮框: 您可以使用指定的图像和其他属性来初始化新项目。 检查此Apple文档。参考 UIBarButtonItem具有使用按

  • 问题内容: 从第一个视图控制器导航到第二个视图控制器时收到错误消息。我的编码就是这样 问题是我总是收到这种错误消息 问题答案: 我已经找到答案了 斯威夫特4 迅捷3

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

  • 问题内容: 完成一些验证后,如何移动到新页面?我有这样的事情: 我想将用户发送到另一条路线。我看过Redirect,但似乎它将从历史记录中删除我不想要的当前页面。 问题答案: 您正在使用react-router v4,因此您需要在组件中使用withRouter来访问历史对象的属性,然后使用它来动态更改路由。 withRouter : 您可以通过withRouter高阶组件访问历史对象的属性和最接近

  • 我迫不及待地开始使用最新的alpha版本的v4。全新的

  • 问题内容: 我正在使用以下代码以编程方式导航到另一个ViewController。它可以正常工作,但是在某种程度上隐藏了。 我该如何解决? (如果需要的话,可通过将嵌入来创建导航栏。) 问题答案: 斯威夫特5 默认的模式呈现样式是卡片。这在顶部显示了以前的视图控制器,并允许用户滑动显示的视图控制器。 为了保留旧样式,您需要修改视图控制器,如下所示: 对于以编程方式创建和情节提要创建的控制器来说都是