SwiftUI:如何使用多个 Sheet

当我们在工作中,总会遇到弹出多个Sheet的情况。弹出一两个的情况下,我们可以使用绑定Boolean变量来完成。但是如果有很多种情况,会弹出很多种不同的Sheet我们该如何了来做呢?这就是我们今天要解决的问题

绑定 Bool 值的方法

SwiftUI 复制代码
.sheet(isPresented: <#T##Binding<Bool>#>, content: <#T##() -> View#>)

这种方法当我们有多个sheet要弹出时,就很麻烦。所以我们建议使用下面方法来完成sheet的弹出,它具有更好的扩展性。

绑定Item方法

SwiftUI 复制代码
.sheet(
item: <#T##Binding<Identifiable?>#>, 
content: <#T##(Identifiable) -> View#>)

它需要一个实现了 Identifiable 协议的 Binding 值。

我们用一个 Model 来承载显示的内容,让model实现 Identifiable 协议。

model 如下:

SwiftUI 复制代码
struct ItemModel: Identifiable {
    let id = UUID().uuidString
    let title: String
}

在使用sheet的地方写上如下代码:

SwiftUI 复制代码
.sheet(item: $selectItemModel) { itemModel in
  NextScreenView(itemModel: itemModel)
}

当你点击某个控件时,我们需要改变 selectItemModel 的值。

SwiftUI 复制代码
Button("BUTTON (index)") {
  selectItemModel = ItemModel(title: "(index)")
}

这样就是可以实现多个sheet弹出的效果。


以下是全部代码

SwiftUI 复制代码
// multiple sheets
struct ItemModel: Identifiable {
    let id = UUID().uuidString
    let title: String
}

struct MultipleSheetsSample: View {
    @State var selectItemModel: ItemModel? = nil
    
    var body: some View {
        ScrollView {
            VStack(spacing: 20) {
                ForEach(0..<20) { index in
                    Button("BUTTON (index)") {
                        selectItemModel = ItemModel(title: "(index)")
                    }
                }
            }
            .sheet(item: $selectItemModel) { itemModel in
                NextScreenView(itemModel: itemModel)
            }
        }
    }
}

struct NextScreenView: View {
    let itemModel: ItemModel
    var body: some View {
        Text(itemModel.title)
            .font(.largeTitle)
    }
}

大家有什么看法呢?欢迎留言讨论。

公众号:RobotPBQ

相关推荐
2601_955767427 小时前
圆偏振光AR膜实测:反射率≤0.5%+96%透光率,iPhone17 Pro贴膜久看不累——观复盾上手
人工智能·科技·ios·ar·iphone·圆偏振光
2501_915106329 小时前
iOS开发工具有哪些?iOS 开发每个阶段的实用工具
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
Digitally9 小时前
如何将数据从 iPhone 传输到传音 Infinix 手机
ios·智能手机·iphone
库奇噜啦呼10 小时前
【iOS】源码学习-KVC与KVO
学习·ios·cocoa
黑化旺仔10 小时前
iOS - 3G share仿写总结
ios
Digitally10 小时前
适用于安卓、iOS 和电脑的最新文件共享应用评测指南
android·ios·电脑
Bowen_J11 小时前
Flutter 屏幕旋转适配
android·flutter·ios
2501_916007471 天前
前端开发常用软件与工具全面指南
android·ios·小程序·https·uni-app·iphone·webview
sweet丶1 天前
iOS AI 编程环境配置:Agent、Skill、Rules、Hook、Command
ios·ai编程