2010-05-19 8 views
4

코코아에서는 셀이 NSTextFieldCell 인 NSOutlineView가 있습니다. 셀은 특정 규칙에 따라 형식화 된 문자열 인 값을 표시합니다 (예 : 부동 소수점 또는 부동 소수점 사이에 공백이있는 쌍). 나는 텍스트를 검증하기 위해 커스텀 NSFormatter를 만들었고 이것은 문제없이 작동하는 것으로 보인다.NSFormatter가 NSTextFieldCell을 연속적으로 확인하도록하십시오

그러나 셀 (또는 아웃 라인 뷰, 나는 이것이 무엇을 일으키는 지 확신 할 수 없음)은 편집이 끝나는 순간 포매터를 사용하는 것처럼 보입니다. 포맷 규칙에 위배되는 텍스트 필드에 알파벳 문자를 입력하면 이러한 문자가 표시됩니다. 포맷터가 작업을 수행하는 유일한 방법은이 셀에서 키보드 포커스를 이동하지 못하도록 방지하는 것입니다. 셀의 내용을 유효한 형식으로 반환하면 포커스를 멀리 이동할 수 있습니다.

셀 및 개요보기를 모두 "연속"으로 설정했습니다.

처음에 셀에 텍스트를 입력 할 수 없다면 더 좋을 것입니다. 그것을 그렇게 만들 수 있습니까? 그렇다면 어떻게 할 수 있습니까?

답변

7

해결책을 찾았 기 때문에 내 질문에 답합니다. NSFormatter에 오버라이드 할 수있는 선택적 방법이 있습니다. 그러면 문제가 해결됩니다. 선택적인 방법은 다음과 같습니다 partialString가 무효 인 경우 하나는 단순히 NO을 반환 할 수 있습니다

다음
- (BOOL) isPartialStringValid: (NSString*) partialString 
      newEditingString: (NSString**) newString 
      errorDescription: (NSString**) error 

. 원하는 경우 고정 된 문자열을 newString에 참조로 반환 할 수 있습니다.

가도 사용할 수 있었던 다른 방법이지만, 더 복잡하다 :

- (BOOL) isPartialStringValid: (NSString**) partialStringPtr 
     proposedSelectedRange: (NSRangePointer) proposedSelRangePtr 
       originalString: (NSString*) origString 
     originalSelectedRange: (NSRange) origSelRange 
      errorDescription: (NSString**) error