IT story

사용자 정의 키보드를 만드는 방법

hot-time 2020. 12. 31. 22:56
반응형

사용자 정의 키보드를 만드는 방법


UITextField를 탭할 때 표시되는 사용자 지정 키보드 / 키패드를 만드는 방법은 무엇입니까? a, b, c, 1, 2, 3 및 Enter 버튼이있는 키패드를 표시하고 싶습니다. 키패드는 표준 키보드처럼 작동하고 동작해야하지만 (동작에서) 확실히 다르게 보일 것입니다.

나는 어떤 예도 찾을 수 없으며 내가 찾은 최선의 방법은 허용되지 않는 솔루션 인 기존 키보드로 문자를 필터링하는 것입니다.


난 당신이 찾고있는 "생각 텍스트, 웹 및 편집은 iOS 용 가이드 프로그래밍 "

UIKit 프레임 워크에는 사용자 정의 입력보기 및 입력 액세서리보기에 대한 지원이 포함됩니다. 사용자가보기에서 텍스트 또는 다른 형식의 데이터를 편집 할 때 애플리케이션이 시스템 키보드에 대한 자체 입력보기를 대체 할 수 있습니다. 예를 들어, 응용 프로그램은 사용자 지정 입력보기를 사용하여 룬 문자의 문자를 입력 할 수 있습니다. 입력 액세서리보기를 시스템 키보드 또는 사용자 정의 입력보기에 연결할 수도 있습니다. 이 액세서리보기는 기본 입력보기의 상단을 따라 실행되며 예를 들어 텍스트에 어떤 방식 으로든 영향을주는 컨트롤이나 텍스트에 대한 일부 정보를 표시하는 레이블을 포함 할 수 있습니다.

응용 프로그램이 텍스트 편집에 UITextView 및 UITextField 개체를 사용하는 경우이 기능을 사용하려면 사용자 지정보기를 inputView 및 inputAccessoryView 속성에 할당하기 만하면됩니다. 이러한 사용자 지정보기는 텍스트 개체가 첫 번째 응답자가 될 때 표시됩니다.


이것은 좋은 소개가 될 수 있습니다 : iOS 키보드 사용자 정의


Github에서 Custom-iOS-Keyboards 라이브러리를 사용할 수 있습니다 .


우선 뷰를 생성합니다 (별도의 nib 파일에서이 작업을 수행하고 이렇게로드했습니다).

    NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"ReducedNumericKeyboardView"
                                                   owner:self
                                                 options:nil];
    keyBView = (ReducedNumericKeyboardView*)[views objectAtIndex:0];

그 후, 사용하려는 텍스트 필드에 대한 입력보기로 설정했습니다 (실제로 이것은 귀하의 질문에 대한 짧은 대답입니다;)).

    [self.propertyEditor setInputView:keyBView];  

필드를 클릭 할 때 필드를 덮지 않도록 뷰 강아지 (필요한 경우)를 스크롤합니다.

CGRect textFieldRect = [self.tableViewController.view.window convertRect:propertyEditor.bounds fromView:propertyEditor];
CGRect viewRect = [self.tableViewController.view.window convertRect:self.tableViewController.view.bounds fromView:self.tableViewController.view];
CGFloat midLine = textFieldRect.origin.y+.5*textFieldRect.size.height;

CGFloat numerator = midLine - viewRect.origin.y - MINIMUM_SCROLL_FRACTION*viewRect.size.height;
CGFloat denominator = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION)*viewRect.size.height;
CGFloat heightFraction = MIN(1, MAX(0, numerator/denominator));

animateDistance = floor(PORTRAIT_USER_INPUT_VIEW_HEIGHT*heightFraction);

CGRect viewFrame = self.tableViewController.view.frame;
viewFrame.origin.y -= animateDistance;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:USER_INPUT_ANIMATION_DURATION];
[self.tableViewController.view setFrame:viewFrame];
[UIView commitAnimations];

편집이 완료되면보기를 아래로 스크롤합니다.

        CGRect viewFrame = self.tableViewController.view.frame;
        viewFrame.origin.y += animateDistance;
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDuration:USER_INPUT_ANIMATION_DURATION];
        [self.tableViewController.view setFrame:viewFrame];
        [UIView commitAnimations];

내가 사용하는 제약 조건은 다음과 같이 설정됩니다.

static const CGFloat USER_INPUT_ANIMATION_DURATION = 0.3;
static const CGFloat PORTRAIT_USER_INPUT_VIEW_HEIGHT = 180;

static const CGFloat MINIMUM_SCROLL_FRACTION = 0.1;
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.2;

값을 설정하려고합니다.

inputView

UITextField에. 제공하는보기에서 새 키보드 또는 입력 메커니즘을 완전히 구현해야합니다.

번갈아,

inputAccessoryView 

can be used to add a small amount of functionality. The view will be placed above the system keyboard and will arrive and be dismissed with it.


Unfortunately, the "Text, Web, and Editing Programming Guide for iOS" referenced above doesn't give any information on what to do with the character once you press a key. This is by far the hard part when implementing a keyboard in iOS.

I have created a full working example of a hex numberpad which can easily be customized with like you need.

Specific details are at my other answer on this subject: https://stackoverflow.com/a/13351686/937822

ReferenceURL : https://stackoverflow.com/questions/4643167/how-to-create-a-custom-keyboard

반응형