我有一个NSTableView
子类,上面有一个小动画,有时会改变其列的宽度。它工作正常,但是如果当时正在编辑其中一个单元格,则字段编辑器会保持原样,并且在调整大小时与单元格的新帧不匹配。每当我为列设置动画时,我都会在NSTableView
子类中调用以下函数:
- (void) updateFieldEditorPosition {
if([self editedRow]!= -1 && [self editedColumn] != -1) {
NSText *fieldEditor = [[self window] fieldEditor:NO forObject:self];
NSRect editedCellFrame = [self frameOfCellAtColumn:[self editedColumn] row:[self editedRow]];
if(!NSEqualRects([fieldEditor frame], editedCellFrame)) {
[fieldEditor setFrame:editedCellFrame];
[fieldEditor setNeedsDisplay:YES];
[self setNeedsDisplay:YES];
}
}
}
不幸的是,这似乎没有做任何事情。我已经检查过,我确实收到了正确的字段编辑器,通过调试器,我可以看到字段编辑器的框架是被设置为正确的值并随着时间的推移而变化,但它实际上从未实际在屏幕上移动。我错过了什么?
修改
所以,我做了一个有趣的发现。如果在设置NSTableColumn
的宽度的同时,我也将其设置为隐藏,然后再次取消隐藏,字段编辑器随之移动!
[tableColumn setWidth:newWidth];
[tableColumn setHidden:YES];
[tableColumn setHidden:NO];
我不知道当我将NSTableColumn
设置为隐藏时,boolean会被翻转,但是它正在运行并且字段编辑器正在自行更新。这不是NSTableView
的needsDisplay,因为如果我设置它而不是隐藏列没有任何反应。任何人都可以向我解释这一点,这样我可以更优雅地做到这一点吗?