SwiftUI SearchField

Buy me a coffee CI SwiftUI Support

搜索输入框组件可以放置在任何位置,并且与默认的搜索输入框样式一致。

SearchField

✦ 我的 macOS/iOS 应用程序 ✦

KeyClicker DayBar Iconed RightMenu Master Quick RSS Quick RSS Web Serve Copybook Generator DevTutor for SwiftUI RegexMate Time Passage Iconize Folder Textsound Saver Create Custom Symbols DevHub Resume Revise Palette Genius Symbol Scribe


安装

您可以通过将 MarkdownUI 添加为包依赖项,从而将其添加到 Xcode 项目中。

  1. 从“文件”菜单中,选择“添加包…”
  2. 在“搜索或输入包 URL”搜索字段中输入 https://github.com/jaywcjlove/swiftui-searchfield
  3. SearchField 链接到您的应用程序目标

或者将以下内容添加到 Package.swift

.package(url: "https://github.com/jaywcjlove/swiftui-searchfield", from: "1.0.1")

或者在 Xcode 中添加包

用法

public init(searchText: Binding<String>,
            placeholder: String? = nil,
            onEditingChanged: ((Bool) -> Void)? = nil,
            onTextChanged: ((String) -> Void)? = nil,
            searchField: ((NSSearchField) -> Void)? = nil)

参数

import SwiftUI

struct ContentView: View {
    @State private var searchText = ""
    var body: some View { 
        SearchField(
            searchText: $searchText,
            placeholder: "Search...",
            searchField: { searchField in
                print(type(of: searchField)) // -> NSSearchField
            }
        )
    }
}

在这个例子中,SearchField 被初始化并绑定到 @State 变量 searchText,用户输入的文本将被打印到控制台。

示例:处理编辑状态

import SwiftUI
import SearchField

struct ContentView: View {
    @State private var searchText = ""
    @State private var isEditing = false

    var body: some View {
        SearchField(
            searchText: $searchText,
            placeholder: "Search...",
            onEditingChanged: { editing in
                isEditing = editing
                print("Editing started: \(editing)")
            },
            onTextChanged: { text in
                print("Search text changed to: \(text)")
            }
        ) { searchField in
            print(type(of: searchField)) // -> NSSearchField
        }
    }
}

在这个例子中,onEditingChanged 闭包被用于处理编辑状态的变化。

示例:访问 NSSearchField 实例

import SwiftUI
import SearchField

struct ContentView: View {
    @State private var searchText = ""
    @State private var searchField: NSSearchField?

    var body: some View {
        SearchField(
            searchText: $searchText,
            placeholder: "Search...",
            searchField: { field in
                // 自定义 NSSearchField 的属性
                field.isBordered = true
                field.isBezeled = true
            }
        )
    }
}

从 v1 升级到 v2

import SearchField

struct ContentView: View {
    @State private var searchText = ""
    var body: some View {
-        SearchField(searchText, textFieldChanged: { value in
+        SearchField(searchText: $searchText, placeholder: "Search...") { text in
-            print("value\(value)")
-            searchText = value
+            print("Search text changed to: \(text)")
+        })
-        }
        Text(searchText)
    }
}
import SwiftUI
import SearchField

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

    var body: some View {
        SearchField(
            searchText: $searchText,
            placeholder: "Search...",
            searchField: { searchField in
                print(type(of: searchField)) // -> NSSearchField
            }
        )
    }
}

许可

基于 MIT 许可证发布。