2009-10-23 2 views
8

내 응용 프로그램의 특정 NSTextView 첨부 파일의 의미 때문에 텍스트 저장 장치에 삽입하거나 삭제할시기를 알고 싶습니다.NSTextView에 첨부 파일 속성이 추가되는시기를 어떻게 알 수 있습니까?

NSTextView의 하위 클래스는 shouldChangeTextInRange : replacementString : 메서드를 구현하므로 첨부 파일이 대체 될시기를 쉽게 확인할 수 있습니다 (지정된 범위에서 텍스트 저장소를 검색 할 수 있음).

대체 문자열은 NSString 뿐이며 NSAttributedString이 아니기 때문에이 방법으로 첨부 파일이 삽입되는지 여부를 알 수 없습니다. "속성 만"편집중인 경우 문자열이 nil 일 수 있다고까지 말할 수 있습니다.

첨부 파일을 삽입하는 시점을 확인하는 가장 좋은 방법은 무엇입니까? 또는 유용 할 수 있습니다. 속성을 수정할 때 가장 좋은 재정의 포인트는 무엇입니까?

업데이트 : 위에서 첨부 파일이 삽입되는지 여부를 알 수있는 방법이 없습니다. 문자열에 마법 NSAttachmentCharacter가 포함되어 있기 때문에 "an"첨부 파일이 관련되어 있다고 말할 수 있다고 지적했습니다. 편집이 끝날 때까지는 첨부 파일에 대한 구체적인 정보가 없습니다.

답변

4

기본 텍스트 저장소가 변경 될 때마다 호출해야하는 NSTextStorage 대리자 메서드 -textStorageDidProcessEditing :을 살펴 보겠습니다. 그런 다음 -editedRange, -editedMask 및 -changeInLength 메소드를 사용하여 텍스트 저장 영역의 어떤 부분이 변경되었는지 판별하고 해당 범위에서 관심있는 첨부 파일을 찾습니다.

+0

감사합니다. 브라이언. 내가 기대했던 것만 큼 이상하지는 않지만 트릭을 할 것처럼 보인다. shouldChange ... 메서드에 특성을 포함하지 않는 것은 부끄러운 일입니다. – danielpunkass

+0

내가 알 수있는 한'-textStorageWillProcessEditing :'은'-textStorageDidProcessEditing :'보다 텍스트에 더 많은 변경을 허용합니다. 대신 그것을 사용하고 싶을 수도 있습니다. –

2
당신은이 NSTextStorage 대리자 메서드에서 살펴 봐야 할 수 있습니다

:

- (void)textStorageWillProcessEditing:(NSNotification *)notification; 
/* Delegate can change the characters or attributes */ 

- (void)textStorageDidProcessEditing:(NSNotification *)notification; 
/* Delegate can change the attributes */ 

textStorageWill/DidProcessEditing 내부, 당신은 -[NSTextStorage editedMask]-[NSTextStorage editedRange]가 변경된 것을 찾아 전화를하고 그에 따라 조치를 취할 수 있습니다.

+0

안녕하세요, Jonathan - 의견을 보내 주셔서 감사합니다. 나는 당신의 대답을 표결했지만 Brian 's를 받아들이기로 결정했다. 왜냐하면 그보다 더 일찍 그리고 두 배의 추가 표를 얻었 기 때문이다. – danielpunkass