返回

在 SwiftUI 中从头开始构建掘金 App——为开发者提供无限创造力的社交平台

IOS

SwiftUI,苹果公司为 iOS 开发者带来的全新编程范例,以其声明式语法、直观的操作界面和丰富的动画效果,彻底改变了 iOS 开发的格局。在本文中,我们将使用 SwiftUI 构建一个功能齐全的掘金 App,并在这个过程中深入了解 SwiftUI 的强大功能。

一、TabView:页面容器

我们的掘金 App 需要包含多个页面,如首页、沸点、发现、小册和我的页面。因此,我们需要创建一个页签容器来管理这些页面。在 SwiftUI 中,我们可以使用 TabView 来实现这一目的。

struct ContentView: View {
    var body: some View {
        TabView {
            HomePageView()
                .tabItem {
                    Label("首页", systemImage: "house")
                }

            BoilingPointView()
                .tabItem {
                    Label("沸点", systemImage: "flame")
                }

            DiscoveryView()
                .tabItem {
                    Label("发现", systemImage: "magnifyingglass")
                }

            BookletView()
                .tabItem {
                    Label("小册", systemImage: "book")
                }

            MyView()
                .tabItem {
                    Label("我", systemImage: "person")
                }
        }
    }
}

二、首页:构建搜索栏

在首页上,我们首先要实现的就是搜索栏。搜索栏可以帮助用户快速找到他们想要的内容。在 SwiftUI 中,我们可以使用 TextField 和 Button 来实现搜索栏。

struct HomePageView: View {
    @State private var searchText = ""

    var body: some View {
        VStack {
            HStack {
                TextField("搜索", text: $searchText)
                    .padding()
                    .background(Color(.systemGray5))
                    .cornerRadius(8)

                Button(action: {}) {
                    Image(systemName: "magnifyingglass")
                }
                .padding()
                .background(Color.blue)
                .foregroundColor(.white)
                .cornerRadius(8)
            }

            // 其他内容
        }
    }
}

三、数据传输:从搜索栏传递数据

当用户在搜索栏中输入内容并点击搜索按钮时,我们需要将搜索内容传递给相应的页面。在 SwiftUI 中,我们可以使用 Binding 和 ObservableObject 来实现数据传输。

class SearchViewModel: ObservableObject {
    @Published var searchText = ""
}

struct HomePageView: View {
    @ObservedObject private var searchViewModel = SearchViewModel()

    var body: some View {
        VStack {
            HStack {
                TextField("搜索", text: $searchViewModel.searchText)
                    .padding()
                    .background(Color(.systemGray5))
                    .cornerRadius(8)

                Button(action: {}) {
                    Image(systemName: "magnifyingglass")
                }
                .padding()
                .background(Color.blue)
                .foregroundColor(.white)
                .cornerRadius(8)
            }

            // 其他内容
        }
    }
}

struct SearchResultsView: View {
    @ObservedObject private var searchViewModel = SearchViewModel()

    var body: some View {
        List {
            // 显示搜索结果
        }
        .searchable(text: $searchViewModel.searchText)
    }
}

四、页面导航:从搜索结果页面返回首页

在搜索结果页面上,我们需要提供一种方式让用户返回首页。在 SwiftUI 中,我们可以使用 NavigationLink 来实现页面导航。

struct SearchResultsView: View {
    @ObservedObject private var searchViewModel = SearchViewModel()

    var body: some View {
        List {
            // 显示搜索结果
        }
        .searchable(text: $searchViewModel.searchText)
        .navigationTitle("搜索结果")
        .navigationBarItems(trailing: Button(action: {
            // 返回首页
            withAnimation {
                self.presentationMode.wrappedValue.dismiss()
            }
        }) {
            Text("完成")
        })
    }
}

通过以上步骤,我们已经构建了掘金 App 的首页的基本功能,包括搜索栏、数据传输和页面导航。在接下来的文章中,我们将继续深入探讨 SwiftUI 的强大功能,并逐步完成掘金 App 的更多功能。