Предотвращение переупорядочения столбца в 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. |