2013-10-05 6 views
1

NSTreeController를 사용하여 Outlineview를 사용했습니다. 대부분 새 항목이 추가 될 때를 제외하고 모든 기능이 작동하기 때문에 항목을 자동으로 편집하도록 선택합니다. NSTableView는 사용시 과거에 나는 그렇게하는 기능이있는 항목이있는 행을 결정하고 NSOutlineView이 NSindexPath을 사용하기 때문에, 내가 이 작업을 수행하는 방법과 사투를 벌인거야,NSOutlineView 항목을 편집하는 방법

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

그러나 기능을 사용하는 것 동일한 결과를 얻기 위해 행과 반대로 NSIndexpath를 전달할 수 있습니다. 아니면 NSOutlineView에 대해 다른 접근 방식을 사용해야합니까?

+0

이하의

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

모든 것이 지금 작동하는 것 같군 해당 선택기, 다음 추가 ?? –

+0

예, 두 번 클릭하여 항목을 편집 할 수 있습니다. 문제는 아닙니다. 내가 필요한 것은 이것을 프로그램 적으로 시작하는 방법이다. – Cory

+0

저에게 효과가있는 것 같은 과거의 경험에서와 같은 방법 ('editColumn : row : withEvent : select :'that)을 시도해 보셨습니까? – Joshua

답변

1

내 문제가 addChild 메소드와 관련된 것으로 밝혀졌습니다. addChild에 대한 문서는 다음을 나타냅니다. 오류 프레젠테이션기구는 시트와 같은 피드백을 제공 할 수 있도록 OS의 X 10.4에이 방법의 결과부터

특별 고려

는 runloop의 다음 반복까지 을 연기한다.

그래서, 난 내 코드는 당신이 인터페이스 빌더에서 편집으로 열을 설정 했

- (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

트리 컨트롤러의'chooseInsertedObjects'가'NO'이면 실패 할 수 있습니다. 하지만 새로 추가 된 항목을 얻는 더 좋은 방법은 모르겠다. –

+0

나는 이것을했다. 그 잘 작동하지만, "기본 폴더를 설정"기본 이름을 설정하는 방법이 필요합니다. 너 나 좀 도와 줄 수있어? – akk

2

당신은 단지 NSOutlineView에 editColumn:row:withEvent:select:를 호출 할 수 있어야한다 :이 NSTableView에서하는 방법 하다니

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

, NSOutlineViewNSTableView의 서브 클래스이며, 따라서 당신도 아웃 라인 뷰에 전화를 걸 수 있습니다.

+2

그리고'rowForItem :'을 사용하여 행 인덱스를 얻을 수 있습니다. –

+0

@PeterHosey 의도 한 결과를주는 대답을 추가했습니다. 그러나 이것이 최선의 방법인지 계속 궁금해합니다. – Cory