2

使用 NSTableview 我可以订阅以NSTableViewColumnDidResizeNotification获取正在调整大小的列的事件:

[[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(tableColumnsResized)
                                             name: NSTableViewColumnDidResizeNotification
                                           object: dataTableView];

但是,我希望仅在调整大小完成后才收到通知(以便我可以保存一些细节)。如果我在每个通知中运行代码,那么调整大小的列会有点卡顿。这就是为什么我只想在调整大小完成时收到通知。

有什么建议我怎么能做到这一点?

4

1 回答 1

2

每当您收到调整大小通知时,您都应该设置一个短计时器,取消之前的任何计时器。然后,您可以在计时器触发方法中执行您的最终操作:

。H:

@interface MyClass : NSView
{
    NSTimer *_columnResizeTimer;
}

@end

米:

// 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

(此代码未经测试,可能有问题)。

于 2013-02-14T13:04:45.633 回答