Skip to content
  • Home
  • Code
  • iOS & Swift
  • Combine
  • RxSwift
  • SwiftUI
  • Flutter & Dart
  • Tutorials
  • Art
  • Blog
Fx Studio
  • Home
  • Code
  • iOS & Swift
  • Combine
  • RxSwift
  • SwiftUI
  • Flutter & Dart
  • Tutorials
  • Art
  • Blog
Written by chuotfx on August 22, 2021

Simple List – SwiftUI Notes #38

SwiftUI

Contents

  • Chuẩn bị
  • List
    • Tạo một List đơn giản
    • Lặp các phần tử
    • Nhiều View cho một Row
  • Custom Row
    • 1. Create Custom Row
    • 2. Sử dụng
  • ForEach
  • Tạm kết

Chào mừng bạn đến với Fx Studio. Đây là bài đầu tiên cho chương mới Working with List của series SwiftUI Notes. List hay danh sách, là một trong những UI Control cơ bản và quan trong nhất để cấu thành giao diện ứng dụng mobile. Khi bạn tự tin & nắm được xử lý về List thì coi nhưng bạn đã hoàn thành SwiftUI. Chủ đề bài viết này là Simple List.

Nếu mọi việc đã ổn rồi, thì …

Bắt đầu thôi!

Chuẩn bị

Về mặt tool và version, các bạn tham khảo như sau:

    • SwiftUI 2.0
    • Xcode 12

Về mặt kiến thức, bạn cần biết trước các kiến thức cơ bản với SwiftUI & SwiftUI App. Tham khảo các bài viết sau, nếu bạn chưa đọc qua SwiftUI:

    • Làm quen với SwiftUI
    • Cơ bản về ứng dụng SwiftUI App

(Mặc định, mình xem như bạn đã biết về cách tạo project với SwiftUI & SwiftUI App rồi.)

Về mặt demo, bạn chỉ cần thực hiện demo trên các SwiftUI View đơn giản. Mình sẽ thực hiện các View riêng biệt với nhau, nên bạn không cần lo lắng gì nhiều về tính liên kết của các View trong một Project. Về mặt giao diện thì khá là đơn giản à.

(Hoặc bạn có thể checkout project demo tại đây.)

List

Hồi tưởng về quá khứ một tí với người tiền nhiệm là UIKit. Chúng ta có UITableView, đây cũng là control tương tự với List trong SwiftUI View.

Vậy List được sử dụng với mục đích gì?

Đơn giản là hiển thị một danh sách lên giao diện ứng dụng.

Chúng ta sẽ có nhiều biến thể từ List để hiển thị danh sách với nhiều mục đích khác nhau:

  • Danh sách 1 chiều và nhiều chiều
  • Hiển thị Image
  • Scroll theo 2 chiều khác nhau
  • Hiển thị danh sách với các loại item khác nhau
  • Hiển thị dữ liệu lấy được từ API
  • ….

Và nếu bạn để ý, trong bất cứ ứng dụng mobile nào (trừ game nhoé) thì đều cũng xuất hiện hình bóng của List. Do đó, hiểu và xử lý thành thục nó là một kỹ năng bắt buộc đối với bạn.

Tạo một List đơn giản

Bắt đầu, chúng ta cần tạo một file SwiftUI View, với tên tuỳ ý bạn đặt cho nó. Sau đó, bạn hãy thêm đoạn code sau đây vào:

struct SimpleListView: View {
    var body: some View {
        List {
            Text("Item 1")
            Text("Item 2")
            Text("Item 3")
            Text("Item 4")
            Text("Item 5")
        }
    }
}

Trong body của View chứa một Control là List. Nó là một Compomemts, bản thân nó chứa được nhiều View khác.

Cú pháp cho List khá đơn giản.

List {
  // Ahihi
}

Bạn hãy bấm Resume và xem kết quả nhoé.

Simple List

Tiếp theo, bạn biến tấu một tí nữa với List trên nhoé. Tham khảo như sau:

struct SimpleListView: View {
    var body: some View {
        List {
            Text("Item 1")
                .font(.title)
            Text("SwiftUI")
            Button(action: {
                
            }, label: {
                Text("Button")
            })
            Text("Item 4")
                .foregroundColor(Color.blue)
            Image(systemName: "globe")
                .resizable()
                .foregroundColor(Color.red)
                .frame(width: 80, height: 80)
        }
    }
}

Trong này, ta sẽ để nhiều loại SwiftUI View khác nhau. Và List của bạn vẫn cân tốt hết nhoé. Tới đây, đặc tính của List cũng khá tương đồng với ScrollView.

Lặp các phần tử

Tiếp theo, bạn sẽ đi vào ý nghĩa chính của List, đó là hiện thị một danh sách nào đó. Nhưng trước tiên, chúng ta xem thử khả năng lặp các phần tử của nó như thế nào.

struct LoopItemsView: View {
    var body: some View {
        List (0..<10) { index in
            Text("Name \(index)")
                .font(.title)
        }
    }
}

Trong đó:

  • Tham số cho List là một range từ 0 ~ 10
  • Tại mỗi bước lặp, ta thêm một Text và nội dụng theo index

Bấm Resume và xem kết quả nhoé!

Simple List

Nhiều View cho một Row

Ta tiếp tục thử, với việc cho nhiều View vào trong một row của List xem như thế nào nha. Lưu ý, chỉ áp dụng được với phương pháp lặp phần tử mà thôi.

Chúng ta sẽ thêm một Image vào trong ví dụ trên tại mỗi bước lặp của List nhoé. Tham khảo đoạn code sau:

struct LoopItemsView: View {
    var body: some View {
        List (0..<10) { index in
            Image(systemName: "person.crop.square.fill")
                .resizable()
                .foregroundColor(Color.orange)
                .frame(width: 50, height: 50)
            Text("Name \(index)")
                .font(.title)
                .foregroundColor(Color.orange)
        }
    }
}

Bấm Resume và cùng nhau xem kết quả nhoé.

Okay, như vậy chúng ta đã có được một Simple List đẹp rồi đó. Tiếp theo, chúng ta sẽ tối ưu code của chương trình.

Custom Row

Công việc tiếp theo, chúng ta là tạo một Custom View cho từng Row nhoé. Công việc này cũng khá tương tự với Custom TableView Cell cho UITableView ở UIKit.

1. Create Custom Row

Bắt đầu, mình tạo thêm một file SwiftUI View và đặt tên là UserCell. Mục đích là tri ân tới UIKit với cái tên cell thôi. Bạn tham khảo code của nó như sau.

struct UserCell: View {
    var body: some View {
        HStack {
            Image(systemName: "person.crop.circle")
                .resizable()
                .foregroundColor(Color.orange)
                .frame(width: 60, height: 60, alignment: .center)
                .padding(.all)
            VStack(alignment: .leading) {
                Text("Noname")
                    .font(.title)
                    .fontWeight(.bold)
                    .foregroundColor(Color.orange)
                    Text("Da Nang, Viet Nam")
                        .fontWeight(.light)
            }
            Spacer()
            Image(systemName: "info.circle")
                .foregroundColor(Color.orange)
                .padding(.all)
        }
    }
}

Cũng khá đơn giản cho Custom View này:

  • Bố cục giao diện với HStack & VStact
  • Các Control cơ bản (Text & Image)

Bấm Resume để xem View mới chúng ta như thế nào nhoé!

2. Sử dụng

Bước này thì khá đơn giản, bạn thay đổi lại đoạn code của List như sau:

struct LoopItemsView: View {
    var body: some View {
        List (0..<10) { _ in
            UserCell()
        }
    }
}

Tại mỗi bước lặp, ta tạo ra một đối tượng SwiftUI View UserCell. Như vậy là xong rồi. Chúng ta bấm Resume để tận hưởng kết quả luôn nhoé!

Simple List

Tới đây, bạn sẽ thấy SwiftUI khá là nhanh và tiện lợi hơn so với UIKit phải không nào. Để custom được UITableview cell thì bạn phải khai báo thêm nhiều function Delegate nữa. Khá là mệt mỏi!

ForEach

Để hiển thị một danh sách bên trong một danh sách khác hoặc trong một Component View khác. Bạn có thể sử dụng tới ForEach.

Tham khảo ví dụ sau:

struct ForEachDemoView: View {
    var body: some View {
        List {
            Text("List users")
                .font(.title)
            ForEach(0..<10) { _ in
                UserCell()
            }
        }
    }
}

Trong đó:

  • List chưa 2 phần tử là Text và ForEach
  • Tại ForEach chúng ta sẽ lặp lần lượt từ 0 đến 10, mỗi bước lặp bạn tạo ra một UserCell

Cùng nhau xem kết quả nhoé!

Simple List

Nếu bạn để ý, với ForEach thì:

  • Chúng ta có thể tạo được nhiều List trong một List.
  • Nhiều session trong đó.
  • Tuỳ ý thêm bớt các giao diện khác nếu bạn muốn.
  • Tạo ra các title hay tách biệt các phần với nhau trong danh sách.
  • …

Đây là tiền đề cho việc tạo nên các giao diện với các danh sách phức tạp hơn.

Tạm kết

  • Hiển thị danh sách đơn giản với List & ForEach
  • Lặp các phần tử với List & ForEach
  • Custom Row để tạo giao diện cho từng Row trong danh sách

 

Okay! Tới đây, mình xin kết thúc bài viết về Simple List trong SwiftUI. Và nếu có gì thắc mắc hay góp ý cho mình thì bạn có thể để lại bình luận hoặc gởi email theo trang Contact.

  • Bạn có thể checkout code tại đây.
  • Bài viết tiếp theo tại đây.

Cảm ơn bạn đã đọc bài viết này!

FacebookTweetPinYummlyLinkedInPrintEmailShares4

Related Posts:

  • feature_bg_swiftui_7
    Giới thiệu MapKit trên SwiftUI
  • dart
    List type - Dart Tour
Tags: SwiftUI, SwiftUI Notes
Written by chuotfx

Hãy ngồi xuống, uống miếng bánh và ăn miếng trà. Chúng ta cùng nhau đàm đạo về đời, về code nhóe!

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Donate – Buy me a coffee!

Fan page

Fx Studio

Tags

Actor Advanced Swift AI api AppDistribution autolayout basic ios tutorial blog ci/cd closure collectionview combine concurrency crashlytics dart dart basic dart tour Declarative delegate deploy design pattern fabric fastlane firebase flavor flutter GCD gradients iOS MVVM optional Prompt engineering protocol Python rxswift safearea Swift Swift 5.5 SwiftData SwiftUI SwiftUI Notes tableview testing TravisCI unittest

Recent Posts

  • Vibe Coding là gì?
  • Cách Đọc Sách Lập Trình Nhanh và Hiệu Quả Bằng GEN AI
  • Nỗ Lực – Hành Trình Kiến Tạo Ý Nghĩa Cuộc Sống
  • Ai Sẽ Là Người Fix Bug Khi AI Thống Trị Lập Trình?
  • Thời Đại Của “Dev Tay To” Đã Qua Chưa?
  • Prompt Engineering – Con Đường Để Trở Thành Một Nghề Nghiệp
  • Vấn đề Ảo Giác (hallucination) khi tương tác với Gen AI và cách khắc phục nó qua Prompt
  • Điều Gì Xảy Ra Nếu… Những Người Dệt Mã Trở Thành Những Người Bảo Vệ Cuối Cùng Của Sự Sáng Tạo?
  • Khi Cô Đơn Gặp Python
  • Học vì tồn tại

You may also like:

  • List type - Dart Tour
    dart
  • Giới thiệu MapKit trên SwiftUI
    feature_bg_swiftui_7

Archives

  • April 2025 (1)
  • March 2025 (8)
  • January 2025 (7)
  • December 2024 (4)
  • September 2024 (1)
  • July 2024 (1)
  • June 2024 (1)
  • May 2024 (4)
  • April 2024 (2)
  • March 2024 (5)
  • January 2024 (4)
  • February 2023 (1)
  • January 2023 (2)
  • November 2022 (2)
  • October 2022 (1)
  • September 2022 (5)
  • August 2022 (6)
  • July 2022 (7)
  • June 2022 (8)
  • May 2022 (5)
  • April 2022 (1)
  • March 2022 (3)
  • February 2022 (5)
  • January 2022 (4)
  • December 2021 (6)
  • November 2021 (8)
  • October 2021 (8)
  • September 2021 (8)
  • August 2021 (8)
  • July 2021 (9)
  • June 2021 (8)
  • May 2021 (7)
  • April 2021 (11)
  • March 2021 (12)
  • February 2021 (3)
  • January 2021 (3)
  • December 2020 (3)
  • November 2020 (9)
  • October 2020 (7)
  • September 2020 (17)
  • August 2020 (1)
  • July 2020 (3)
  • June 2020 (1)
  • May 2020 (2)
  • April 2020 (3)
  • March 2020 (20)
  • February 2020 (5)
  • January 2020 (2)
  • December 2019 (12)
  • November 2019 (12)
  • October 2019 (19)
  • September 2019 (17)
  • August 2019 (10)

About me

Education, Mini Game, Digital Art & Life of coders
Contacts:
contacts@fxstudio.dev

Fx Studio

  • Home
  • About me
  • Contact us
  • Mail
  • Privacy Policy
  • Donate
  • Sitemap

Categories

  • Art (1)
  • Blog (43)
  • Code (10)
  • Combine (22)
  • Flutter & Dart (24)
  • iOS & Swift (101)
  • No Category (1)
  • RxSwift (37)
  • SwiftUI (80)
  • Tutorials (86)

Newsletter

Stay up to date with our latest news and posts.
Loading

    Copyright © 2025 Fx Studio - All rights reserved.