2013-05-02 3 views
1

return 키를 사용하여 줄 바꿈을 추가하는 간단한 문자열 테이블이 필요합니다. 또한 사용자가 특정 행의 텍스트를 지우는 경우에도 행을 삭제하려고합니다. 사용자가 행의 텍스트를 지우고 안타 때NSTableView 텍스트 지우기로 행 삭제

-(BOOL)control:(NSControl*)control textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector{ 
if (commandSelector == @selector(insertNewline:)) { 
    [self returnKey]; 
    return YES; 
} 
else if(commandSelector == @selector(moveUp:)){ 
    [self tableMoveUp]; 
    return YES; 
} 
else if(commandSelector == @selector(moveDown:)){ 
    [self tableMoveDown]; 
    return YES; 
} 
else{ 
    NSLog(@"%@", NSStringFromSelector(commandSelector)); 
} 

return NO; 

}

문제는 행을 삭제한다 :

나는이 방법으로 반환 키로 새 줄을 추가하기 위해 관리했습니다 리턴 키. 이 메소드는 테이블의 실제 변경 사항이 데이터 소스에 저장되기 전에 호출됩니다. 나는이 칼럼에서 dataCell을 얻으려고 시도했다.

NSTextFieldCell *cell = [self.tableView.tableColumns[0] dataCell]; 
NSLog(@"%@",cell.stringValue); 

그러나 stringValue는 정확하지 않다. 이것을 달성하는 방법에 대한 아이디어가 있습니까? 감사합니다.

답변

0

테이블 열의 데이터 셀은 각 행 (값을 설정하고 그리기, 거품, 헹굼, 반복을 할 때 그 자리에 "스탬프")로 재사용되므로이 종류의 코드를 넣기에는 이상한 곳입니다. "stringValue는 정확하지 않습니다"관측은 이것에 대한 큰 단서입니다. 셀을 마지막으로 그려야하는 값으로 설정되며, 결정할 수도없고 결정할 수도 없습니다.

왜 데이터 소스를 관리하지 않습니까? -tableView : setObjectValue : forTableColumn : row :가 호출되면 obj가 빈 문자열/nil/whatever인지 확인한 다음 해당 행을 제거하고 다시로드하십시오. "이 셀 비우기"는 사용자 작업입니다. 테이블 뷰는이를 처리하고 데이터 소스 (컨트롤러)가 사용자가 변경 작업을 할 때 알립니다.

"삭제/백 스페이스로 행을 삭제"하고 NSTextFieldCell을 사용자 지정하여 데이터 소스가 관찰 할 수있는 "MyTableRowWasDeleted"알림을 보내고 "빈"행을 편집하고 제거하는 적절한 단계를 수행하도록 사용자 지정하면, 다시로드하십시오.