列调整大小完成后的NSTableView通知?

问题描述 投票:2回答:1

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

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

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

有什么建议我怎么能这样做?

objective-c nstableview
1个回答
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

(此代码未经测试且可能有错误)。

© www.soinside.com 2019 - 2024. All rights reserved.