2014-02-20 8 views
2

보기에 확장 툴팁이 활성화되어 있고 텍스트가 맞지 않는 NSTextField이 있으면 사용자가 커서를 필드 위로 가져 가면 OS X에 확장 툴팁이 표시됩니다. setStringValue:을 호출하여 NSTextField의 텍스트 내용을 변경하면 확장 툴팁의 크기가 업데이트되지 않습니다. 예를 들어 원본 텍스트의 길이가 100 자이지만 새 텍스트의 길이가 50자인 경우 새 텍스트 위에 마우스를 가져 가면 새 텍스트가 포함 된 100 자까지 확장 된 툴팁이 표시됩니다. 새 문자열이 NSTextField에 완전히 들어 맞더라도 확장 툴팁이 나타나지 않는 경우에도 마찬가지입니다.NSTextField setStringValue를 호출 한 후 확장 툴팁 크기를 업데이트하려면 어떻게해야합니까?

반대의 경우도 발생합니다. 원래 문자열이 NSTextField에 맞으면 확장 툴팁이 표시되지 않습니다. 새 문자열이 NSTextField 내에 맞지 않으면 필요한 경우에도 확장 툴팁이 나타나지 않습니다.

내부적으로 NSTextFieldNSTextFieldCellNSCell 방법 expansionFrameWithFrame:inView:을 구현합니다. 뭔가 (나는 무엇을) 이것을 한 번 호출하고, 결과를 캐싱하는 것으로 보인다. setStringValue:을 사용하여 새 문자열을 설정해도이 함수가 다시 호출되지는 않습니다.

setStringValue:을 호출 한 후 NSTextField에서 setNeedsDisplay을 호출해도 문제가 해결되지 않습니다.

그래서 AppKit에서 확장 툴팁의 크기를 조정하려면 어떻게해야합니까?

+0

나는 내 자신의 질문에 대답했지만, 누군가가 덜 해커 같은 방법으로이 문제를 해결할 때를 대비하여 내 대답을 받아들이지 않을 것입니다. –

+0

나는 슬프게도 대부분의 코코아 질문이 질문의 저자에 의해 hackish 방법으로 응답된다는 것을 안다. – tofutim

+0

나는 방금 3 년 전에 의견을 남겼다는 것을 깨달았다. 게시 해 주셔서 다시 한 번 감사드립니다. – tofutim

답변

2

많은 실험을 거친 후이를 해결하는 두 가지 방법을 발견했습니다.

매우 어려운 방법은 텍스트가 변경 될 때마다 NSTextField 전체를 삭제하고 다시 만드는 것입니다. NSTextFieldNSCopying 프로토콜을 따르지 않으므로 NSArchiverNSUnarchiver을 사용하여 원본 NSTextField을 복제해야하며, 심지어 제약 조건과 같은 일부 특성은 복사되지 않기 때문에 힘들 수 있습니다.

쉬운 방법은 NSTextField을 숨기거나 취소하는 것입니다.

NSTextField *textField; 
{...} 
[textField setStringValue:newText]; 
[textField setHidden:YES]; 
[textField setHidden:NO]; 

은에 AppKit의 호출 expansionFrameWithFrame:inView:하게 제대로 확장 툴팁의 존재와 크기를 업데이트 NSTextFieldNSTextFieldCell.

+0

Bob, 마술처럼 작동합니다. – tofutim