특히 텍스트 필드 포커스와 관련하여 불일치하게 동작합니다.LSUIElement가 activateIgnoringOtherApps와 일치하지 않게 동작합니다.
LSUIElement에 상태 메뉴가 있습니다. 이 메뉴에는 텍스트 필드가 포함 된보기가 있습니다. 텍스트 필드는 선택 가능해야합니다. 기본적으로 선택되지는 않지만 어느 것이 든 선택됩니다. 상태 항목을 클릭하면
, 그것은
[NSApp activateIgnoringOtherApps:YES];
를 트리거 그리고, 절반의 시간을 작동합니다. * 상태 메뉴는 "백그라운드에서"자체를 고려하는 것 같다 나머지 절반와 못하게 텍스트 필드를 클릭해도 초점을 맞 춥니 다. (상태 항목 클릭 트리거가 b/c를 실행 중임을 알고 있습니다.)
Apple에서 이러한 상태 항목을 처리하는 방식의 버그입니까, 아니면 ActivIgnoringOtherApps의 mishandling입니까?
* 실제로 다른 앱이 활성화 된 후에 처음으로 실패하는 것으로 보입니다. 그 후 그것은 잘 작동합니다.
전체 조각 :
-(void)statusItemClicked:(id)sender {
//show the popup menu associated with the status item.
[statusItem popUpStatusItemMenu:statusMenu];
//activate *after* showing the popup menu to obtain focus for the text field.
[NSApp activateIgnoringOtherApps:YES];
}
분명히 너무 늦게 활성화되었지만 제안 된대로 코드가 이미 구조화되었습니다. 거의 활성화 메소드가 상태 메뉴가 닫힐 때까지 호출되지 않는 것처럼 보입니다 (NSLog 테스트는 이것을 감당할 것 같습니다). 나는 그것이 왜 일어날 지 이해하지 못합니다. – iconmaster
'activateIgnoringOtherApps :'는'popUpStatusItemMenu :'의 직후에 호출 되나요, 아니면 메뉴가 닫힐 때까지 돌아 오지 않습니까? 중단 점을 설정하고 디버거를 통해 실행하여 어떤 일이 발생하는지 확인할 수 있습니다. – Alex
그래, 중단 점을 사용하면 메뉴가 닫힌 후에야 확실히 호출됩니다. 첫 번째 게시물에 내 코드를 추가합니다.하지만 내 의견은 제안과 거의 같습니다. – iconmaster