2014-09-23 5 views
1

NSComboBox 팝업을 프로그래밍 방식으로 닫을 수 있습니까?NSComboBox 팝업 방식으로 팝업 닫기

팝업이 열려있을 때 NSComboBox에 버그가있는 것처럼 보이며 컨트롤이 제거 된 다음 해제됩니다. 어떤 이유로 NSComboBox의 dealloc은 파기 전에 팝업을 지우지 않습니다.

편집 : 분명히하기 -이 버그는 팝업 목록을 열 때만 발생합니다. 그렇지 않으면 컨트롤이 적절하고 깨끗하게 해제됩니다.

수정 편집 : 다음은이를 재현하는 방법입니다.

  • 새 코코아 응용 프로그램을 만듭니다.
  • 자동 참조 횟수를 끕니다.
  • @ (applicationDidFinishLaunching)에서는 새 NSComboBox를 만들어 멤버에 저장합니다.
  • 콤보 상자를 창의 contentView에 추가하십시오.
  • 키보드 바로 가기를 사용하여 새 메뉴 항목을 만들고 선택기에 바인딩하십시오.
  • 메뉴 항목의 선택기에서 :보기에서 콤보 상자를 제거하고 멤버를 놓습니다. 다시 Nil로 설정하는 것을 잊지 마십시오.
  • 응용 프로그램을 실행하십시오.
  • 콤보 상자를 클릭하면 팝업이 표시됩니다.
  • 바로 가기를 사용하여 콤보 상자를 제거하십시오.
+0

내가 전화'abortEditing' 닫을 것이라고 생각할 겁니다으로 설정 모델 키 경로에 메뉴 항목의 활성화 속성을 바인딩합니다. "파괴하기 전에 팝업을 지우지 말라"는 것에 대해 당신이 무슨 말을하는지 잘 모르겠습니다. 팝업은 'NSComboBox'의 일부이므로 공개해야합니다. 어떻게 든 그것을 유지하고 있습니까? –

+0

예, 당신은 컨트롤이 공개되었을 때 팝업을 파괴해야한다는 것이 옳았지 만 버그는 아닌 것 같습니다. 깨끗한 프로젝트로 쉽게 복제 할 수 있습니다. – AndyTang

+0

@ (중단) 작동하지 않습니다! 그러나 팝업이 닫히지 않았으므로 팝업이 계속 표시됩니다. 그러나 @ (abortEditing)로 인해 이미 제거 된 항목에 액세스하려고 시도하지 않으므로 더 이상 충돌하지 않습니다. – AndyTang

답변

-2

당신은 당신의 코드에서 검사를 수행하거나 BOOL을 제어 할 NSComboBox 대리자 메서드 -comboBoxWillPopUp:-comboBoxWillDismiss:를 사용하여 메뉴 항목을 회색으로 수 있습니다.

BOOL 속성을 사용하여 메뉴 항목의 활성화를 제어 할 수 있습니다.

콤보 상자의 대리자를 설정하십시오. 대리인의 인터페이스에

@property BOOL itemEnabled;

및 구현에

YESitemEnabled

- (void)comboBoxWillPopUp:(NSNotification *)notification { 
    self.itemEnabled = NO; 
} 
- (void)comboBoxWillDismiss:(NSNotification *)notification { 
    self.itemEnabled = YES; //re-enabled when dismissed 
} 

설정 초기 값을 추가합니다. XIB에서

대리자 및 self.itemEnabled

+0

이것은 팝업의 상태를 확인하는 데 도움이되지만 실제로 팝업을 닫지는 않습니다. lol –