NSButton을 뷰로, NSMenuItem을 주 메뉴로 가지는 NSToolbarItem이 있습니다. 두 가지 모두 동일한 작업을 수행하며, 첫 번째 응답자에게 보내지는 것이지 특정 대상에는 보내지 않습니다. 이 메서드는 궁극적으로 NSSplitViewController의 하위 클래스에서 구현됩니다. NSSplitViewController는 창의 내용보기의 뷰 계층 구조 어딘가에 있습니다. 두 항목의 유효성을 검사하고 싶지만 해당 컨트롤러에 로컬 인 일부 조건에 의존하기 때문에 특정 분할 뷰 컨트롤러에서 유효성 검사를 수행해야합니다.관련 컨트롤러의 NSToolbarItem 유효성 확인
분할보기 컨트롤러에서 validateToolbarItem(_:)
과 validateMenuItem(_:)
을 오버로드했습니다. 메뉴 항목의 경우 예상대로 작동합니다. 메서드가 호출되고 유효성 검사가 수행됩니다. 그러나 validateToolbarItem(_:)
은 호출되지 않습니다.
Apple’s documentation에 따르면 NSToolbar는보기 기반 도구 모음 항목에 validateToolbarItem(_:)
을 보내지 않습니다. 이를 테스트하기 위해 도구 모음 항목을 이미지 도구 모음 항목으로 대체했으며 예상대로 작동합니다.
이 점을 근거로 몇 가지 해결책을 찾아 왔지만, 내가 원하는 것은 아닙니다.
하위 클래스 NSToolbarItem 및 override
validate()
. 그러나 컨트롤러의validateToolbarItem(_:)
을 호출하는 방법에 대한 지침은 제공되지 않습니다.하위 클래스 NSToolbar와
validateVisibleToolbarItems()
을 재정의 한 다음 첫 번째 응답자에게 메시지를 보냅니다. 이 문제는 도구 모음의 응답자 체인 외부에 있기 때문에 분할보기 컨트롤러에 메시지를 보낼 수 없다는 문제가 있습니다.위와 같이 서브 클래스 NSToolbar를 사용하지만 NSWindowController와 같이 응답 체인에있는 컨트롤러에
validateToolbarItem(_:)
을 구현하십시오. 이 작동하지만 그 다음 메뉴 항목에 필요하지 않은 것을 처리하기 위해 추가 코드를 추가해야합니다.
이미지 툴바 항목 및 메뉴 항목처럼 효과가있는 우아한 해결책이 있습니까?
내가 찾고있는 환상적인 솔루션. 고마워요! – Eitot
아름다운! 이것을 공유해 주셔서 감사합니다. 두 가지를 설명해 주시겠습니까? 1) 왜 이것이 필요한 이유입니까? 왜 코코아가 이미 이것을하지 않았습니까? 그리고 b) 얼마나 자주 이것이 호출되기를 기대해야 하는가? 코드를 빠르게 구현할 때 예측할 수 없을 정도로 자주 호출되는 것처럼 보입니다. –
@ jeff-h 1) NSToolbarItem의 내부보기는 NSControl 이상일 수 있습니다. 그래서 코코아는 그것이 무엇인지 알지 못하므로 어떻게 검증해야 하는가. 2) 그것은 이벤트 트라이 거와 타이머의 조합입니다. 참조 유효성 검사시기에 대한 자세한 내용은 https://developer.apple.com/reference/appkit/nstoolbar/1516947-validatevisibleitems에서 확인할 수 있습니다. – 1024jp