Технические вопросы и ответы QA1503

Предотвращение переупорядочения столбца в NSTableView

Q: Как делают я препятствую тому, чтобы определенный столбец был переупорядочен или приближен мой NSTableView?

A: Как делают я препятствую тому, чтобы определенный столбец был переупорядочен или приближен мой NSTableView?

Можно предотвратить перемещение столбца путем реализации NSTableView метод делегата tableView:mouseDownInHeaderOfTableColumn: и ответ к NSTableViewColumnDidMoveNotification. Метод tableView:mouseDownInHeaderOfTableColumn: будет препятствовать тому, чтобы первый столбец был перетащен, и tableViewColumnDidMove: если пользователь пытается переместить какой-либо столбец налево от столбца 0, может быть записан для восстановления первоначального заказа столбцов.

Например, примите первое NSTableColumn (столбец 0) идентификатор установлен в»FirstName".

  Блок перечисления 1 NSTableView от перетаскивания первого столбца с помощью NSTableView метод делегата.

-(void)tableView: (NSTableView*)inTableView mouseDownInHeaderOfTableColumn:(NSTableColumn*)tableColumn
{
    if ([[tableColumn identifier] isEqualToString:@"FirstName"])
    {
        [inTableView setAllowsColumnReordering:NO];
    }
    else
    {
        [inTableView setAllowsColumnReordering:YES];
    }
}

В Вашем awakeFromNib или init использование метода следующее:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tableViewColumnDidMove:) name:NSTableViewColumnDidMoveNotification object:nil];

  Переупорядочивание перечисления 2 столбцы после переупорядочивания перетаскивания путем ответа на NSTableViewColumnDidMoveNotification.

- (void)tableViewColumnDidMove:(NSNotification*)aNotification
{
    NSDictionary* userInfo = [aNotification userInfo];

    // if the user tries to move the first column out, move it back
    if ([[userInfo objectForKey:@"NSOldColumn"] intValue] == 0)
    {
         // temporarily stop listening to column moves to prevent recursion
         [[NSNotificationCenter defaultCenter] removeObserver:self
                name:NSTableViewColumnDidMoveNotification object:nil];

         // move the column
         [tableView moveColumn:[[userInfo objectForKey:@"NSNewColumn"] intValue] toColumn:0];

         // listen again for column moves
         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tableViewColumnDidMove:)
                name:NSTableViewColumnDidMoveNotification object:nil];
    }
    // if the user tries to move a column in front of the first column, move it back 
    else if ([[userInfo objectForKey:@"NSNewColumn"] intValue] == 0)
    {
         // temporarily stop listening to column moves to prevent recursion
         [[NSNotificationCenter defaultCenter] removeObserver:self
                name:NSTableViewColumnDidMoveNotification object:nil]; 

         // move the column
         [tableView moveColumn:0 toColumn:[[userInfo objectForKey:@"NSOldColumn"] intValue]];

         // listen again for column moves
         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tableViewColumnDidMove:)
                name:NSTableViewColumnDidMoveNotification object:nil];
    }
}


История версии документа


ДатаПримечания
24.01.2007

Новый документ, демонстрирующий, как предотвратить переупорядочение столбца определенных столбцов в NSTableView.