Есть ли API IOS, который может отображать клавиатуру вручную - PullRequest
0 голосов
/ 09 августа 2011

У меня есть пользовательский вид, я хочу отображать клавиатуру в качестве ввода и общаться с ней.

спасибо, ребята ~

Ответы [ 2 ]

5 голосов
/ 09 августа 2011

В вашем пользовательском представлении вы должны добавить UITextField нулевого размера, а затем установить ваше представление в качестве его делегата.Затем в пользовательском представлении определите распознаватель жестов (например, одним касанием) и в событии распознавания распознавателя жестов установите текстовое поле в качестве первого респондента.Как только вы нажмете на вид, появится клавиатура.Затем напишите метод делегата:


-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

для управления взаимодействием с набранной строкой.Не забудьте вызвать setNeedsDisplay, если вам нужно обновить свое представление о наборе пользовательской клавиатуры.

Пример ниже работает.Вы, конечно, должны создать экземпляр пользовательского представления в вашем контроллере представления.В этом примере просто введите букву на клавиатуре, и она будет отображена на экране.



//
//  MyView.h
//

#import 

@interface MyView : UIView {

    UITextField *tf;

}

@property (nonatomic,copy) NSString *typed;

@end

//
//  MyView.m
//

#import "MyView.h"

@implementation MyView

@synthesize typed;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        self.backgroundColor=[UIColor redColor];
        tf = [[UITextField alloc] initWithFrame:CGRectZero];
        tf.delegate=self;
        [self addSubview:tf];
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
        [self addGestureRecognizer:tap];
    }
    return self;
}


// Only override drawRect: if you perform custom drawing.
- (void)drawRect:(CGRect)rect
{
    // Draw the "typed" string in the view
    [[UIColor blackColor] setStroke];
    if(self.typed) {
        [self.typed drawAtPoint:CGPointZero withFont:[UIFont systemFontOfSize:50]];
    }
}


-(void)tap:(UIGestureRecognizer *)rec {
    if(rec.state==UIGestureRecognizerStateEnded) {
        [tf becomeFirstResponder];
    }
}

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    self.typed=[string substringToIndex:1]; // extract the first character of the string
    [self setNeedsDisplay]; // force view redraw
}

@end

0 голосов
/ 11 марта 2013

Я думаю, что решение может быть таким же простым, как реализация протокола UIKeyInput в вашем классе.

Подробнее о Справочник по протоколу UIKeyInput .

...