NSTableView 绑定和 tableViewSelectionDidChange
NSTableView bindings and tableViewSelectionDidChange
我有一个带有绑定的 NSTableView 设置,我已经将委托+数据源设置为文件所有者。 table 视图的元素未触发委托方法。如果我在元素外部单击,即 table 视图背景 - selectionShouldChangeInTableView
被调用。
我不明白为什么不调用 tableViewSelectionDidChange
。说真的,为什么调试这么难?
-(void)tableViewSelectionDidChange:(NSNotification *)notification {
NSLog(@"%s", __PRETTY_FUNCTION__);
NSTableView *tableView = [notification object];
[[NSNotificationCenter defaultCenter] postNotificationName:TABLE_SELECTION object:tableView];
}
- (BOOL)selectionShouldChangeInTableView:(NSTableView *)tableView {
NSLog(@"Hello there");
return YES;
}
如果您对所选行感兴趣,可以使用委托方法
- (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex
但是 更好的方法是在选择数组控制器本身时添加一个观察者,您的 table 绑定到
的数组控制器
[myArrayController addObserver:self forKeyPath:@"selection" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
并使用以下方法监听变化:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSString *,
id> *)change
context:(void *)context
并且不要忘记在析构函数方法中删除观察者
-(void)dealloc
{
[super dealloc];
[myArrayController removeObserver:self];
}
我有一个带有绑定的 NSTableView 设置,我已经将委托+数据源设置为文件所有者。 table 视图的元素未触发委托方法。如果我在元素外部单击,即 table 视图背景 - selectionShouldChangeInTableView
被调用。
我不明白为什么不调用 tableViewSelectionDidChange
。说真的,为什么调试这么难?
-(void)tableViewSelectionDidChange:(NSNotification *)notification {
NSLog(@"%s", __PRETTY_FUNCTION__);
NSTableView *tableView = [notification object];
[[NSNotificationCenter defaultCenter] postNotificationName:TABLE_SELECTION object:tableView];
}
- (BOOL)selectionShouldChangeInTableView:(NSTableView *)tableView {
NSLog(@"Hello there");
return YES;
}
如果您对所选行感兴趣,可以使用委托方法
- (BOOL)tableView:(NSTableView *)aTableView shouldSelectRow:(NSInteger)rowIndex
但是 更好的方法是在选择数组控制器本身时添加一个观察者,您的 table 绑定到
的数组控制器[myArrayController addObserver:self forKeyPath:@"selection" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
并使用以下方法监听变化:
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSString *,
id> *)change
context:(void *)context
并且不要忘记在析构函数方法中删除观察者
-(void)dealloc
{
[super dealloc];
[myArrayController removeObserver:self];
}