如何在 Catalyst 应用程序中将搜索栏添加到 NSToolbar 中?

How to get a search bar into an NSToolbar in a Catalyst app?

我看到一些 Catalyst 应用程序向 NSToolbar 添加了一个搜索栏,我想知道如何才能做到这一点。我是否必须导入 AppKit/Cocoa 才能获得 NSSearchField 和实际的 NSToolbar?还是有一些我只是没有看到的 UISearchBars 方法?任何帮助都会很棒,谢谢。

我已经尝试导入 AppKit 和 Cocoa(使用捆绑加载器),但我认为我没有做对。如果有人对如何执行此操作有可靠的指南,请link它。

我还尝试创建一个带有 UISearchBar 自定义视图的 UIBarButtonItem,它最终不会呈现任何内容。 (可以在下面找到)

这是在 itemIdentifier.rawValue 的开关盒中找到的(在工具栏 itemForIdentifier 函数中)

let search = UISearchBar()
search.sizeToFit()
let button = UIBarButtonItem(customView: search)
button.width = 100
let toolbarItem = NSToolbarItem(itemIdentifier: itemIdentifier, barButtonItem: button)
toolbarItem.isBordered = true
toolbarItem.isEnabled = true
return toolbarItem

我找到了适合我的解决方案,也许它也适合你。

虽然我无法在工具栏中创建搜索栏,但我可以创建看起来非常像搜索栏的按钮。该按钮随后会切换 Catalyst 应用程序中搜索栏的可见性。

这是它的 (obj-c) 代码:

    UIImageSymbolConfiguration *conf = [UIImageSymbolConfiguration configurationWithPointSize:32 weight:UIImageSymbolWeightRegular];
    UIImage *backImage = [UIImage systemImageNamed:@"magnifyingglass" withConfiguration:conf];
    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithImage:backImage style:UIBarButtonItemStylePlain target:self action:@selector(searchButtonAction)];
    NSToolbarItem *item = [NSToolbarItem itemWithItemIdentifier:itemIdentifier barButtonItem:buttonItem];
    item.title = @"Search";
    return item;

下面是它在应用程序中的外观图片:

作为奖励,您可以使用一些不可修剪的 space 字符 (like this one) 在 "Search" 字符串之后添加 space,使按钮看起来更像一个合适的搜索栏。

外观如下:

感谢 mmackh,可以像添加任何其他工具栏项一样轻松添加搜索栏。感谢所有调查此问题的人。

https://github.com/mmackh/Catalyst-Helpers


Swift 例子

将文件添加到项目后(在本例中为桥接 header),只需 return 就像添加任何其他工具栏项一样。

let item = NSToolbarItem_Catalyst.searchItem(withItemIdentifier: "searchBar", textDidChangeHandler: { string in
    print(string)
})