2011-08-03 6 views
1

하나의 편집 가능한 필드가있는 NSTableView가 있습니다. 셀 편집이 잘 작동하고 대리자 루틴이 업데이트를 가져와 필요에 따라 업데이트 할 수 있습니다. 문제는 타이머 또는 비동기 (소켓) 입력을 기반으로 테이블의 값을 업데이트하는 다른 코드가 있다는 것입니다. 편집이 진행되는 동안 업데이트 이벤트가 발생하면 업데이트가 사용자 입력을 덮어 씁니다. 편집하는 동안 NSTableView에 대한 업데이트 방지

나는 인스턴스 변수 잠금 업데이트를 차단하기 위해 위임 방법을 사용하려고 해요 :

- (BOOL)control:(NSControl *)control textShouldBeginEditing:(NSText *)fieldEditor; 
{ 
    tableEditInProgress = YES; 
    return YES; 
} 

- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor 
{ 
    tableEditInProgress = NO; 
    return YES; 
} 

- (void)controlTextDidBeginEditing:(NSNotification *)aNotification 
{ 
    tableEditInProgress = YES; 
} 

- (void)controlTextDidEndEditing:(NSNotification *)aNotification 
{ 
    tableEditInProgress = NO; 
} 

이 내용은 사용자가 실제로 유형의 업데이트가 발생하기 전에 분야에서 새로운 텍스트를 경우 작동하는 것 같다. 사용자가 필드에서 편집 커서를 가져 오면 즉시 업데이트를 차단하고 싶습니다 (필드 내용을 두 번 클릭).

아마도 저는 잘못된 대리인 메서드를 사용하고 있습니다. 이 nil이 아닌 인 경우 [tableView currentEditor]; 전화,

를 사용하면 테이블이 현재 편집되고 있는지 여부를 확인하려는 경우 :

TIA

답변

0

이 모든 물건을 죽겠다 시도하고 대신에 이것을 시도 , 테이블 뷰가 편집 중입니다. 그것이 0이면 편집되지 않습니다. 즉 :

BOOL tableEditInProgress = ([tableView currentEditor] != nil); 
+0

그래서, 대신에'경우 (tableEditInProgress) 반환의;','경우 ([sensorTable currentEditor] = 0!) \t 반환 할 대신을'? – Flyingdiver

+0

감사합니다. – Flyingdiver

+0

네, 맞습니다. 그것은 실제로 작동해야합니다. – Enchilada

관련 문제