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

.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

(このコードはテストされておらず、バグがある可能性があります)。

于 2013-02-14T13:04:45.633 に答える