12

iOS开发 - 在SwiftUI中显示模态视图

 4 years ago
source link: https://www.cnblogs.com/GarveyCalvin/p/swiftui-modal-sheet.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在SwiftUI中显示模态视图

这里教大家如何弹出一个简单的模态视图。分别有两个页面,ContentView和GCPresentedView,以下对应简称为A和B。我们要做的是在A视图中点击按钮跳转到B视图,然后再从B视图点击按钮返回到A视图。

在A视图中创建按钮和模态视图代码

struct ContentView: View {
    @State var isPresented = false
    
    var body: some View {
        Button(action: {
            self.isPresented = true
        }, label: {
            Text("Present Modally")
        })
        .sheet(isPresented: $isPresented) {
            GCPresentedView()
        }
    }
}

使用@State对属性进行修饰,在 SwiftUI 内部会自动转换为一对getter,setter,对这个属性进行赋值时会触发视图更新。

$isPresented能够将值引用(引用方法是在值前方加一个$符号),当引用的值发生改变时,这个改变会向外传递。

.sheet方法用于弹出一个模态视图,在SwiftUI中的定义为。

public func sheet<Content>(isPresented: Binding<Bool>, onDismiss: (() -> Void)? = nil, @ViewBuilder content: @escaping () -> Content) -> some View where Content : View

在B视图中创建按钮和关闭模态视图代码

struct GCPresentedView: View {
    @Environment(\.presentationMode) var mode
    
    var body: some View {
        Button(action: {
            self.mode.wrappedValue.dismiss()
        }, label: {
            Text("Dismiss")
        })
    }
}

@Environment获取环境变量presentationMode,我们可以通过这个变量调用wrappedValue.dismiss()可以关闭模态视图。

直接在 Xcode 运行预览

使用 SwiftUI 框架处理界面方便很多,不用太多的定义,我们只需要将界面进行描述出来就可以了。这个教程示例中使用到了 Button 和 Text 控件,也用到了@State, Binding, @Environment 技术点。教程很简单,放上来大家一起学习,教程里的代码已放在了GitHub上面,点击这里获取代码

博文作者:GarveyCalvin
博文出处:http://www.cnblogs.com/GarveyCalvin/
本文版权归作者和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作!


Recommend

  • 10

    在上一篇文章中,我们了解了 SwiftUI 的 Text 组件,并通过 Stack 系列的组件对内容进行了一些简单的布局。在这篇文章里,我们会认识一个全新的图片组件...

  • 8
    • www.fatbobman.com 3 years ago
    • Cache

    SwiftUI 视图的生命周期研究

    SwiftUI 视图的生命周期研究在 UIKit(AppKit)的世界中,通过框架提供的大量钩子(例如 viewDidLoad、viewWillLayoutSubviews 等),开发者可以将自己的意志注入视图控制器生命周期的各个节点之中,宛如神明。在 SwiftUI 中,系统收回了上...

  • 9
    • www.isaced.com 3 years ago
    • Cache

    iOS开发:Tool Bar 多视图切换

    Written by on October 8, 2012 iOS开发:Tool Bar 多视图切换 一直都想把ios开发的点滴记录下来,懒的很了,这次要写下来了。 虚拟鸡上跑MAC太坑了,我的DELL小本i5 2G内存伤...

  • 3
    • www.fatbobman.com 2 years ago
    • Cache

    避免 SwiftUI 视图的重复计算

    避免 SwiftUI 视图的重复计算随着近年来有关 SwiftUI 的文章与书籍越来越多,开发者应该都已经清楚地掌握了 —— “视图是状态的函数” 这一 SwiftUI 的基本概念。每个视图都有与其对应的状态,当状态变化时,SwiftUI 都将重新计算与其对应视图的 bo...

  • 5

    用 NavigationViewKit 增强 SwiftUI 的导航视图最近一直在为我的 iOS 健康管理 app健康笔记 3.0 做前期的准备工作。由于 SwiftUI 原生提供的导航手段能力有限,因...

  • 4

    本文将对 SwiftUI 的 zIndex 修饰符做以介绍,包括:使用方法、zIndex 的作用域、通过 zIndex 避免动画异常、为什么 zIndex 需要设置稳定的值以及在多种布局容器内使用 zIndex 等内容。zIndex 修饰符在 SwiftUI 中,开发者使用 z...

  • 4
    • www.fatbobman.com 2 years ago
    • Cache

    SheetKit——SwiftUI 模态视图扩展库

    SheetKit 是什么SheetKit 是一个 SwiftUI 模态视图的扩展库。提供了数个用于模态视图的便捷展示、取消方法,以及几个用于模态视图的 View Extension。开...

  • 7

    在 SwiftUI 中实现视图居中的若干种方法将某个视图在父视图中居中显示是一个常见的需求,即使对于 SwiftUI 的初学者来说这也并非难事。在 SwiftUI 中,有很多手段可以达成此目的。本文将介绍其中的一些方法,并对每种方法背后的实现原理、适用场...

  • 7
    • www.fatbobman.com 2 years ago
    • Cache

    在 SwiftUI 中使用 UIKit 视图

    在 SwiftUI 中使用 UIKit 视图已迈入第三个年头的 SwiftUI 相较诞生初始已经提供了更多的原生功能,但仍有大量的事情是无法直接通过原生 SwiftUI 代码来完成的。在相当长的时间中开发者仍需在 SwiftUI 中依赖 UIKit(AppKit)代码。好在,SwiftU...

  • 4

    如何在 Xcode 下预览含有 Core Data 元素的 SwiftUI 视图从 SwiftUI 诞生之日起,预览(Canvas Preview )一直是个让开发者又爱又恨的功能。当预览正常工作时,它可以极大地提高开发效率;而预览又随时可能因为各种莫名其妙的原因崩溃,不仅影响...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK