2012-06-26 5 views
2

나는 command + a, command + s, command + x, command + x와 같은 기본 명령 키 조합을 더 지원하기 위해 iOS 앱을 가지고 있습니다. 사용자가 블루투스 키보드를 연결하면 command + v와 친구가 표시됩니다.외부 키보드가 연결되어있을 때 명령, 제어 및 화살표 키를 지원합니다.

나는 이것이 가능하다는 것을 알고있다. Textastic 및 기타 편집 응용 프로그램과 같은 응용 프로그램은 이러한 기능을 지원합니다.

나는 UIResponder (팝업 메뉴에서만 사용하는 것처럼 보임), UIKeyInput, UITextInput [Delegate] 및 기타 API 문서를 참조하는 방법을 언급하지 않았습니다.

(BOOL) canPerformAction : (SEL) action withSender : (id) 보낸 사람을 사용하여 UIMenuController에 표시되는 옵션을 지원하는 것은 쉽습니다. 그러나이 방법은 블루투스 키보드가 연결될 때 호출되지 않습니다. 그래서 키보드 나 다른 것에 대한 다른 방법을 구현해야합니다.

이제는 텍스트 하위 시스템이 해당 작업을 수행해야 할 수도 있습니다. 그러나 찾을 수있는 문서가 없습니다! 또한 작업 수행시 UITextInput 대리자 메서드가 호출되지 않습니다. 나는 거의 솔루션이 사적이라고 생각하고 있으며 애플에게이 기능들에 접근하는 방법을 물어볼 필요가있다.

UPDATE :

positionFromPosition : 간접 : 오프셋 : 화살표 키를 눌렀을 때를 검출하기 위해 사용할 수있는 방법이다. iOS가이 메소드를 호출 한 후 setSelectedText :를 호출합니다. 배관의 나머지 부분을 해결해야합니다.

UPDATE 2 :

내가 가진 모든 질문에 대답 할 수 있었다. 답변을 보려면 표시된 솔루션을 참조하십시오.

답변

4

알아 냈어. 이미 잘라 내기, 복사 및 붙여 넣기를 지원하는 UIMenuController 메서드를 구현했습니다. 이러한 기능을 구현하여 블루투스 키보드를 실제 장치에 연결하면 기본 명령 옵션 (a, c, x, v 및 friends)이 자동으로 표시됩니다. UIMenuController UIResponderStandardEditActions를 완전히 구현해야합니다. iOS 시뮬레이터에서 이 아니라 트리거 명령 (a, c, x, v 및 친구) 동작을 기록합니다. 시뮬레이터에서 "하드웨어 키보드 시뮬레이션"이 활성화되어 있어도 블루투스 키보드가 물리적 장치에 연결되었을 때만이 기능을 과 같이 작동하는 것으로 관찰 할 수있었습니다.

제어/옵션 키; UITextInput을 완벽하게 구현하면 화살표 키, 화살표 키 + 컨트롤, 화살표 키 + 옵션 등을 사용할 때 모든 이동 기능을 사용할 수 있습니다. Apple에서 제공하는 SimpleTextInput 예제 코드 파일을 살펴보고이를 구현하는 방법에 대해 더 자세히 알아보십시오. . 그와

당신의 자신의 키보드 조합을 만들 수 없습니다 수있다. 애플은 내가 그 기능을 원한다면 티켓을 만들어달라고 부탁했다. 나는 그런 기능을 제공하지 않았다. 그래서 Command + s (save)와 같은 명령은 현재 가능하지 않습니다.

재미있는 작은 이야기입니다. 애플은 API로 명령 (+ c, command + v 등)을 사용하고 싶지 않다고 말했다. 나는 당신이 그들의 기술적 인 전문성이 얼마나 도움이되었는지 보여줍니다. 매우 실망.

업데이트 :

return @[[UIKeyCommand keyCommandWithInput:UIKeyInputEscape modifierFlags:0 action:@selector(escapeKeyPressed:)], 
     [UIKeyCommand keyCommandWithInput:@"f" modifierFlags:UIKeyModifierCommand action:@selector(commandFindPressed:)], 
     [UIKeyCommand keyCommandWithInput:@"s" modifierFlags:UIKeyModifierCommand action:@selector(commandSavePressed:)], 
     [UIKeyCommand keyCommandWithInput:@"b" modifierFlags:UIKeyModifierControl action:@selector(controlBKeyPressed:)], 
     [UIKeyCommand keyCommandWithInput:@"f" modifierFlags:UIKeyModifierControl action:@selector(controlFKeyPressed:)], 
     [UIKeyCommand keyCommandWithInput:@"r" modifierFlags:UIKeyModifierControl action:@selector(controlRKeyPressed:)] 
     ]; 
... 

- (void)commandSavePressed:(UIKeyCommand *)keyCommand 
{ 
    [self saveFile]; 
} 
:

는 아이폰 OS 7 이후, 애플은 어떤 키 명령, ESC 등 여기를 포착하는 것이 사소한했다 하나는 다른 키의 다양한 캡처 할 수있는 방법의 예입니다

+0

"하드웨어 키보드 시뮬레이션"은 화면 키보드가 나타나지 않게하는 것 같습니다. 필자는 시뮬레이터 키보드 단축키가 계속해서 작동 할 것으로 기대합니다. '가능하지 않습니다'라는 응답은 아마도 개발자가 직접 대면하는 대신 API가없는 사용자가 직면하기 때문에 (즉, 사용자가 기대할 수있는 기능) 때문일 수 있습니다. –

+0

아마도 나는 잘못된 방식으로 질문을했을 것입니다. 내부가 어떻게 작동하는지 또는 "예상 된"최종 사용자 행동이 무엇인지 모를 때 내가하려고하는 일을 설명하는 것은 어려울 수 있습니다. API는 또한 특정 API가 시스템을 제공하는 데이터를 사용하는 방법의 부작용을 설명하지 않습니다. 예를 들어, UIMenController가 단축키 기능을 제공하는 데에도 사용되었다는 사실을 전혀 모릅니다. Apple의 응답에 관해서는 너무 기대가 높을 수 있습니다. 나는 내가 분명하다고 생각했지만, 아마도 그들은 내가 다른 것을 언급하고 있다고 믿었을 것입니다. – PeqNP

+0

당신이 물어 본 사람은 그 기능이 존재하지 않을 가능성이 높습니다.나는 UX 테스터가 "이봐, 왜 하드웨어 키보드 작업을 복사하고 붙여 넣지 않니?"라고 말한 것 같습니다. 개발자는 "알고 있습니다! UIMenuController 콜백에 연결할 수 있습니다"라고 말했습니다. –

0

불행히도 공용 API를 사용하여이를 수행 할 방법이 없습니다. 나는 예를 들어 내 ipad와 무선 키보드를 사용하기 때문에, 전에 이것을 들여다 보았다. 그러나 명령 키 대신 옵션 키를 사용하는 것을 잊어 버리면 해결 방법을 구현할 수 있습니다.

당신이 응용 프로그램의 텍스트 편집기 유형을 만들고 있다고 가정하면 다음과 같이 할 수 있습니다. 입력 된대로 각 문자를 폴링하고 switch 문을 사용하여 특정 "특수 기능 문자"와 비교합니다. 옵션을 누르고있을 때 사용자가 키를 입력하면 ",», ü 등의 특수 문자가 삽입됩니다. 이러한 문자 중 유니 코드 값을 찾고 이러한 키 중 하나를 누르면 비 일관적인 동작을 수행하면됩니다. 또한, 옵션 키와 함께 홀딩 쉬프트가 다른 문자를 출력하는 방법에 주목하십시오.

+0

이 정보를 제공해 주셔서 감사합니다. 나는 내가 위로 채찍질 할 수있는 것을 볼 것이다. – PeqNP

+0

예. 옵션 키가 작동합니다. 나는 지금 그 열쇠를 사용할 것이다. 정말 고마워! – PeqNP

+0

문제 없습니다. 키보드 단축키를 구현할 수 없다는 진술 한 앱 (Textastic, 최고의 코드 에디터 btw라고 생각합니다)을 사용했음을 기억합니다.하지만이 문제에 대해 생각하게 만들었습니다.이 솔루션은 내가 생각한 것입니다. 이를 위해 편리한 기능을 제공하는 타사 라이브러리를 보는 것이 흥미로울 것입니다. – C0deH4cker

관련 문제