2011-05-13 5 views
1

두 개의 필드 열이있는 창이 있습니다. 왼쪽에는 NSTableViewNSTokenField이 있고 오른쪽에는 NSTextField 두 개가 있습니다. 탭 순서를 왼쪽 아래로, 오른쪽으로 이동합니다. (따라서 주문은 내 창에 NSTableView, NSTokenField, NSTextField, NSTextField이되어야합니다.) 그러나 Cocoa는 자신이 선호하는 순서를 위에서 아래로 결정하는 것처럼 보입니다. NSTokenField은 다른 컨트롤보다 창에서 더 낮게 위치하므로 항상 NSTableView에서 오른쪽 NSTextField으로 탭을 이동 한 다음 다시 왼쪽 하단 NSTokenField으로 이동합니다.Cocoa 응용 프로그램에서 사용자 지정 탭 순서 설정

Apple 개발자 설명서의 Enable Tabbing Between Text Fields 섹션을 읽고 Interface Builder의 nextKeyView를 원하는 순서로 드래그 해보았습니다. 이것은 탭 순서에 전혀 영향을 미치지 않는 것으로 보입니다. 그리고 제가 말할 수있는 것에서, Cocoa는 여전히 탭 순서를 선택하기 위해 기본 탐지 방법을 사용하는 것처럼 보입니다.

아이디어가 있으십니까? 내 목표는 10.6+입니다. ,
등록 controlTextDidEndEditing 알림 태그로 현장을 확인하고 창에 makeFirstResponder:fieldOfYourChoice 전화 :

답변

2

창문의 initialFirstResponder 콘센트도 첫 번째 필드 (이 경우 테이블보기)로 설정해야합니다.

+0

고마워요 ... 이것이 문제였습니다. 나는 약간 어리 석다. :) –

0

은 프로그래밍을해야 할 겁니다 것 같은데. 그리고/또는 필드에 IBAction을 사용하여 sender으로 식별하고 makeFirstResponder으로 전화하십시오.

+0

프로그래밍 방식으로해야하는 이유는 무엇입니까? 사용자가 + 탭을 이동하려면 어떻게해야합니까? 가치가있는 것을 위해, 나는 이것을 시험해 보았다. 그러나 그것은 효과가 없었다. 한 가지 문제는 NSTableView가 멀리 떨어져 탭을 만들 때 NSTableView가 delegate에 controlTextDidEndEditing 알림을 보내지 않는다는 것입니다. 알림을 시작하는 NSTokenField 및 NSTextFields에서도 makeFirstResponder 메시지가 탭 순서를 변경하지 않는 것 같습니다. 마지막으로 필드에 IBAction을 사용하면 Enter 키를 눌렀을 때 불이 붙을 것으로 생각하고 입력 할 때 필드를 변경하고 싶지 않기 때문에 잘 작동하지 않을 수 있습니다. –

+0

다른 방법이 없다면 키 이벤트를 캡처 할 수 있습니다. 모든 컨트롤은 NSResponder의 하위 클래스이므로 NSResponder의 하위 클래스 인 경우 NSResponder의 keyUp 메서드를 사용자 정의 할 수 있습니다. 이벤트가 탭인지 또는 시프트 탭인지 테스트합니다. 그렇지 않다면 아무 것도하지 마십시오. 그렇다면 컨트롤에서 firstResponder 상태를 가진 창을 찾아 현재 위치를 파악하고 거기서 이동하십시오. (이 작업을하려면 makeFirstResponder를 사용할 수 있어야합니다. 버튼과 텍스트 필드 모두 나를 위해 작동합니다 .0.1 지연을 추가해보십시오.) 또한 IB에서 충돌하는 nextKeyViews를 제거해야 할 수도 있습니다. – Wienke

관련 문제