SwiftUI控件篇-List

废话不说,直接上菜。

1:最简单的List

 List{
            Text("111")
            Text("111")
            Text("111")
        }

需要注意的是,里面数据超过十个报错,语法不符合,超出其重用机制。

2:ForEach 加载

1,0到10循环
List{
        ForEach(0..<10){ I in
            NavigationLink("行\(i)", destination: BottomeView())
        }
2,循环一个数组
List{
        let txtArr:[String] = ["1","2","3","4","5","6","7"]
        ForEach(txtArr,
                id:\.self){ txt in
            Text(txt)
        }
}

NavigationLink的用法,可自己看,也可等后面讲到

3:使用List遍历Array

let txtArr:[String] = ["1","2","3","4","5","6","7"]
    
    List(txtArr ,id: \.self){
       
        ListCell(txt: $0)
        NavigationLink($0, destination: ListDetail(txt: $0))
    }

此方式需要注意,Navi Link中,destination无法使用自定义cell,如若解决,可用以下方式

 List(txtArr,id: \.self) { txt in
        NavigationLink(destination: ListDetail(txt: txt)) {
            ListCell(txt: txt)
        }
    }

4:可选中的List

1,定义数据

struct Person:Identifiable,Hashable {

    let name:String
    let id = UUID()
}
var Persons = [
    Person(name: "JM"),
    Person(name: "HSQ"),
    Person(name: "TD"),
    Person(name: "KJ"),
    Person(name: "BM")
]

2,实现

//单选
@State private var Selection : UUID?
//多选
@State private var multiSelection = Set<UUID>()

List(Persons, selection: $Selection) {
        NavigationLink($0.name, destination: ListDetail(txt: $0.name))
 }
            .toolbar { EditButton() }

单选和多选,只需要更改List中Selection的绑定的状态值即可

5:分组的List

原Swift和OC中Plan,Group类型的TableView

1,定义数据,在上面4定义的数据的基础上

//用于分组
struct Family:Identifiable,Hashable {
    let name:String
    let persons:[Person]
    let id = UUID()
}
var familys = [
    Family(name: "家庭一", persons: [Person(name: "JM"),Person(name: "JM"),Person(name: "JM"),Person(name: "JM")]),
    Family(name: "家庭二", persons: [Person(name: "JM"),Person(name: "JM"),Person(name: "JM"),Person(name: "JM")]),
    Family(name: "家庭三", persons: [Person(name: "JM"),Person(name: "JM"),Person(name: "JM"),Person(name: "JM")]),
    Family(name: "家庭四", persons: [Person(name: "JM"),Person(name: "JM"),Person(name: "JM"),Person(name: "JM")])
]

2,实现

 List(selection: $singleSelection){
        ForEach(familys) { family in
            Section(header: Text(" \(family.name)")) {
                ForEach(family.persons) { person in
                    NavigationLink(person.name, destination: ListDetail(txt: person.name))
                }
            }
        }
    }

若要实现分组可选中,可结合上述4,可选中的List来看

扩展 listStyle

         InsetGroupedListStyle
         GroupedListStyle      平铺
         PlainListStyle        组头悬浮
         SidebarListStyle      可折叠组

用法

List{   }.listStyle(SidebarListStyle())

6:等级List

取官方例子,想不出来什么更好的例子
1,定义数据

struct FileItem: Hashable, Identifiable, CustomStringConvertible {
    var id: Self { self }
    var name: String
    var children: [FileItem]? = nil
    var description: String {
        switch children {
        case nil:
            return "?? \(name)"
        case .some(let children):
            return children.isEmpty ? "?? \(name)" : "?? \(name)"
        }
    }
}
let fileHierarchyData: [FileItem] = [
    FileItem(name: "users", children:
                [FileItem(name: "user1234", children:
                            [FileItem(name: "Photos", children:
                                        [FileItem(name: "photo001.jpg"),
                                         FileItem(name: "photo002.jpg")]),
                             FileItem(name: "Movies", children:
                                        [FileItem(name: "movie001.mp4")]),
                             FileItem(name: "Documents", children: [])
                            ]),
                 FileItem(name: "newuser", children:
                            [FileItem(name: "Documents", children: [FileItem(name: "test")])
                            ])
                ]),
    FileItem(name: "private", children: nil)
]

2,实现

List(fileHierarchyData, children: \.children) { item in
        if (item.children == nil){
            NavigationLink(item.description, destination: ListDetail(txt: item.description))
        }else{
            Text(item.description)
        }   
    }

7,可编辑List

List{
        ForEach(
            items,
            id:\.self
        ){
            item in
            Text(item);
        }
        .onDelete(perform: { indexSet in
            items.remove(at: indexSet.last ?? 0)
            print(items)
        })
        .onMove(perform: { indices, newOffset in
            items.move(fromOffsets: indices, toOffset: newOffset)
            print(items)
        })
    }
    .navigationTitle("按钮二")
    //.navigationBarHidden(true)
    
    .toolbar(content: {
        EditButton()
    })

8,更改cell高度

只需要更改内部控件的高度即可

List(txtArr,id: \.self) { landmark in
        NavigationLink(destination: ListDetail(txt: landmark)) {
            ListCell(txt: landmark).frame(height:100)
        }
    }

组件基本看完,目前在实战应用,哪天想起来,我会再更的,铁鸡们

Simulator Screen Shot - iPhone 11 Pro Max - 2021-02-11 at 00.36.26.png

Simulator Screen Shot - iPhone 11 Pro Max - 2021-02-11 at 00.36.33.png
最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容