2013-10-05 3 views
1

У меня есть Outlineview с использованием NSTreeController, по большей части все работает так, как хотелось бы, кроме случаев добавления нового элемента, я бы хотел, чтобы элемент автоматически выбирался для редактирования. В прошлом при использовании NSTableView я бы определить строку элемент расположен и используется функцияКак отредактировать элемент NSOutlineView

- (void)editColumn:(NSInteger)columnIndex row:(NSInteger)rowIndex withEvent:(NSEvent *)theEvent select:(BOOL)flag 

Однако, поскольку NSOutlineView использует NSIndexPath, я борюсь с тем, как выполнить это, так есть функция доступный для передачи NSIndexpath, а не строки для достижения того же результата. Или мне нужен другой подход для NSOutlineView.

+0

Вы установили колонку, как для редактирования в строителем интерфейса ?? –

+0

Да, я могу дважды щелкнуть и отредактировать любой элемент, это не проблема. Мне нужен способ инициировать это программно. – Cory

+0

Вы пробовали этот метод ('editColumn: row: withEvent: select:' that is) как из прошлого опыта, который, похоже, работал для меня. – Joshua

ответ

1

Оказывается, моя проблема связана с методом addChild, документация для addChild указывает на следующее:

Особые соображения

Начиная с OS X v10.4 результат этого метода не откладывается до следующей итерации runloop так, что механизм представления ошибок может обеспечить обратную связь в виде листа.

Итак, я добавил следующее, с соответствующим селектором

[self performSelector:@selector(editNewSector:) withObject:nil afterDelay:0]; 

Все, кажется, работает в настоящее время, мой код ниже

- (IBAction)addChildSector:(id)sender 
{ 
    [[self myTreeController] addChild:sender]; 
    [self performSelector:@selector(editNewSector:) withObject:nil afterDelay:0]; 
} 

- (IBAction)editNewSector:(id)sender 
{ 
    NSTreeNode *nodeSector = [[self myOutlineView] 
            itemAtRow:[[self myOutlineView] selectedRow]]; 

    NSInteger row = [[self myOutlineView] rowForItem:nodeSector]; 
    [[self myOutlineView] editColumn:0 row:row withEvent:nil select:YES]; 
} 
+1

Это может быть неудачно, если «selectsInsertedObjects» контроллера дерева «NO». Однако я не знаю, как лучше получить недавно добавленный элемент. –

+0

Я сделал это. его работа отлично, но мне нужно Как установить имя по умолчанию, Как «untitle folder». мог бы помочь мне – akk

2

Вы должны быть в состоянии просто позвонить editColumn:row:withEvent:select: на NSOutlineView:

[outlineView editColumn:0 row:editRowIndex withEvent:nil select:YES]; 

Хотя этот метод из NSTableView, NSOutlineView подкласс NSTableView и, таким образом, вы можете вызвать его в поле зрения контурной тоже.

+2

И вы можете получить индекс строки, используя 'rowForItem:'. –

+0

@PeterHosey Я добавил ответ, который дает ожидаемые результаты. Но все еще интересно, если это лучший способ. – Cory

Смежные вопросы