使用NSTableview,我可以订阅NSTableViewColumnDidResizeNotification
以获取正在调整大小的列的事件:
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(tableColumnsResized)
name: NSTableViewColumnDidResizeNotification
object: dataTableView];
但是,我只想在调整大小完成后才收到通知(这样我就可以保存一些细节)。如果我每次通知都运行代码,那么调整大小的列会有点干扰。这就是为什么我只想在调整大小完成时收到通知。
有关如何做到这一点的任何建议吗?
答案 0 :(得分:2)
每当收到调整大小通知时,您应该设置一个短计时器,取消之前的任何计时器。然后,您可以在计时器触发方法中执行最终操作:
·H:
@interface MyClass : NSView
{
NSTimer *_columnResizeTimer;
}
@end
的.m:
// Private Methods
@implementation MyClass ()
- (void)_columnResized:(NSTimer *)timer;
@end
@implementation MyClass
- (void)dealloc
{
[_columnResizeTimer invalidate];
_columnResizeTimer = nil;
// If using MRR:
[super dealloc];
}
- (void)tableViewColumnDidResize:(NSNotification *)notification
{
[_columnResizeTimer invalidate];
_columnResizeTimer = [NSTimer scheduledTimerWithTimeInterval:0.5
target:self
selector:@selector(_columnResized:)
userInfo:nil
repeats:NO];
}
- (void)_columnResized:(NSTimer *)timer
{
[_columnResizeTimer invalidate];
_columnResizeTimer = nil;
// Do stuff on column resize
}
@end
(此代码未经测试且可能有错误。)