В вашем пользовательском представлении вы должны добавить 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