7

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

我尝试过导入 AppKit 和 Cocoa(使用捆绑加载器),但我认为我做得不对。如果有人有关于如何做到这一点的可靠指南,请链接它。

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

这可以在 itemIdentifier.rawValue 的 switch case 中找到(在工具栏 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
4

2 回答 2

5

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

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


快速示例

一旦您将文件添加到您的项目(在这种情况下是您的桥接头),只需像其他任何工具栏项一样返回它。

let item = NSToolbarItem_Catalyst.searchItem(withItemIdentifier: "searchBar", textDidChangeHandler: { string in
    print(string)
})
于 2019-10-13T20:55:12.760 回答
1

我找到了一个适合我的解决方案,也许它对你也足够好。

虽然我无法在工具栏中创建搜索栏,但我可以创建看起来很像搜索栏的按钮。然后,该按钮会切换 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;

以下是它在应用程序中的外观图片: iOS 搜索栏关闭 iOS 搜索栏打开

作为奖励,您可以使用一些不可修剪的空格字符(例如这个)在“搜索”字符串之后添加空格,使按钮看起来更像是一个合适的搜索栏。

看起来是这样的:

最终搜索栏

于 2019-10-11T11:55:30.277 回答