gpt4 book ai didi

macos - 如何使用 NSSearchField 在 NSTableView 中进行搜索?

转载 作者:行者123 更新时间:2023-12-02 01:38:02 24 4
gpt4 key购买 nike

我已经实现了一个应用程序,其中我在数据源和委托(delegate)的帮助下使用 NSTableview 我没有使用 NSArrayController 也不想使用它。我的问题是在这种情况下如何将 NSSearchField 与 NSTableView 绑定(bind)?我已经看到很多使用 NSArrayController 的答案。我不想将实现转换为 NSArrayController,因为 NSMutableArray 运行良好。

最佳答案

TableView是一个显示控件,不用于过滤。您应该添加 2 个 NSArray 属性;
1) @property(nonatomic, Strong) NSArray *allItems;
2) @property(nonatomic, Strong) NSArray *filteredItems;

#import "ViewController.h"

@interface ViewController()<NSSearchFieldDelegate, NSTableViewDelegate, NSTableViewDataSource>

// Your NSSearchField
@property (weak) IBOutlet NSSearchField *searchField;

// Your NSTableView
@property (weak) IBOutlet NSTableView *tableView;

// In this array you will store all items
@property(nonatomic, strong) NSArray *allItems;

// In this array you will store only filtered items
@property(nonatomic, strong) NSArray *filteredItems;

@end

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad];

self.searchField.delegate = self;// You can set delegate from XIB/Storyboard
self.tableView.delegate = self;// You can set delegate from XIB/Storyboard
self.tableView.dataSource = self;// You can set dataSource from XIB/Storyboard

self.allItems = @[@"Test1", @"Demo filter", @"Test 2", @"Abracadabra"];
[self applyFilterWithString:@""];
}

- (void)controlTextDidChange:(NSNotification *)obj{

if (obj.object == self.searchField) {
[self applyFilterWithString:self.searchField.stringValue];
}
}

-(void)applyFilterWithString:(NSString*)filter {

if (filter.length>0) {
NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"self CONTAINS[cd] %@", filter];
self.filteredItems = [self.allItems filteredArrayUsingPredicate:filterPredicate];
}
else {
self.filteredItems = self.allItems.copy;
}
[self.tableView reloadData];
}

#pragma mark - ***** NSTableViewDataSource, NSTableViewDelegate *****

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return self.filteredItems.count;
}


// for the "Cell Based" TableView
- (nullable id)tableView:(NSTableView *)tableView objectValueForTableColumn:(nullable NSTableColumn *)tableColumn row:(NSInteger)row {

NSString *item = self.filteredItems[row];
return item;
}

@end

关于macos - 如何使用 NSSearchField 在 NSTableView 中进行搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33052428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com