SwiftUI:如何在macOS 11上使用NSSearchToolBarItem?
我观看了WWDC的视频“采用macOS的新外观”,视频中11:32,他们在Swift中介绍了NSSearchToolBarItem 这正是我需要做的,但如何将此搜索添加到SwiftUI中的工具栏 有很多复杂的示例,但它们似乎都是在这个新API之前编写的。一定有更简单的方法吗SwiftUI:如何在macOS 11上使用NSSearchToolBarItem?,swiftui,toolbar,macos-big-sur,nssearchtoolbaritem,Swiftui,Toolbar,Macos Big Sur,Nssearchtoolbaritem,我观看了WWDC的视频“采用macOS的新外观”,视频中11:32,他们在Swift中介绍了NSSearchToolBarItem 这正是我需要做的,但如何将此搜索添加到SwiftUI中的工具栏 有很多复杂的示例,但它们似乎都是在这个新API之前编写的。一定有更简单的方法吗 import SwiftUI var listItems = ["Item 1", "Item 2", "Item 3", "Item 4"]
import SwiftUI
var listItems = ["Item 1", "Item 2", "Item 3", "Item 4"]
struct ContentView: View
{
@State var select: String? = "Item 1"
@State var searchText: String = "hello"
var body: some View
{
VStack
{
NavigationView
{
List
{
ForEach((0..<listItems.count), id: \.self)
{index in
Label(listItems[index], systemImage: "briefcase")
}
}
}
.toolbar
{
Button(action: {})
{
Label("Upload", systemImage: "square.and.pencil")
}
TextField("Search", text: $searchText)
}
}
}
}
导入快捷界面
var listItems=[“项目1”、“项目2”、“项目3”、“项目4”]
结构ContentView:View
{
@状态变量选择:字符串?=“项目1”
@State var searchText:String=“hello”
var body:一些观点
{
VStack
{
导航视图
{
列表
{
ForEach((0..直接使用NSSearchToolbarItem
似乎没有一个明显的方法来实现这一点,但是,查看该类,它在引擎盖下使用了一个NSSearchField
,在SwiftUI中使用NSViewRepresentable
相对容易:
struct SearchField:NSViewRepresentable{
类协调器:NSObject、NSSearchFieldDelegate{
var父项:SearchField
init(uu父项:SearchField){
self.parent=parent
}
func controlTextDidChange(uu通知:通知){
guard let searchField=notification.object as?NSSearchField else{
打印(“更新通知中的意外控件”)
返回
}
self.parent.search=searchField.stringValue
}
}
@绑定变量搜索:字符串
func makeNSView(上下文:context)->NSSearchField{
NSSearchField(帧:.0)
}
func updateNSView(searchField:NSSearchField,context:context){
searchField.stringValue=搜索
searchField.delegate=context.coordinator
}
func makeCoordinator()->Coordinator{
返回协调员(自我)
}
}
然后,您可以直接在工具栏项中使用此托管视图:
工具栏项{
SearchField(搜索:$filter)
.frame(最小宽度:100,理想宽度:200,最大宽度:无穷大)
}
您可能希望稍微调整一下维度(在.frame()
调用中)以匹配退出平台本机维度,但这似乎与Notes.app的外观非常匹配
在Notes.app中搜索工具栏项目:
从上面的示例代码中搜索工具栏项: