自定义iPhone键盘(Custom iPhone Keyboard)

2019-08-31 13:18发布

我需要(即客户要求),提供自定义键盘,为用户键入文本到两个文本字段和地区。 我已经有了的东西做的键盘和附加测试文本字段,但是我想,使其更加通用的,有它像标准的iPhone键盘,即当德用户选择可编辑的文本控制出现。 目前我的控制器知道目标和目标是不可编辑的,以防止标准键盘。

有没有一种方法挂接到文本的行为控制,所以我用我自己的键盘容易吗?

谢谢,维克

Answer 1:

这里有一个想法:修改现有的键盘你自己的需要。 首先,注册时通知它出现在屏幕上:

[[NSNotificationCenter defaultCenter] addObserver:self 
                                      selector:@selector(modifyKeyboard:)
                                      name:UIKeyboardWillShowNotification
                                      object:nil];

然后,在你modifyKeyboard方法:

- (void)modifyKeyboard:(NSNotification *)notification 
{
    UIView *firstResponder = [[[UIApplication sharedApplication] keyWindow] performSelector:@selector(firstResponder)];

    for (UIWindow *keyboardWindow in [[UIApplication sharedApplication] windows])
        for (UIView *keyboard in [keyboardWindow subviews])
            if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
            {
                MyFancyKeyboardView *customKeyboard = [[MyFancyKeyboardView alloc] initWithFrame: CGRectMake(0, 0, keyboard.frame.size.width, keyboard.frame.size.height);
                [keyboard addSubview: customKeyboard];
                [customKeyboard release];
            }
}

这会增加你对原来的键盘的俯视图,所以一定要使它不透明。



Answer 2:

你可以与iOS 3.2或更高版本做到这一点。 检查的UITextField的有关详细信息,inputView财产。



Answer 3:

只要你不提交应用程序到应用程序商店,你可以使用一种叫做方法混写在运行时动态更换核心类的方法。 例如:

@interface UIControl(CustomKeyboard)
- (BOOL)__my__becomeFirstResponder
@end

@implementation UIControl(CustomKeyboard)
- (BOOL)__my__becomeFirstResponder
{
    BOOL becameFirstResponder = [self __my__becomeFirstResponder];
    if ([self canBecomeFirstResponder]) {
        [MyKeyboard orderFront];
    }
    return becameFirstResponder;
}

+ (void)initialize
{
    Method old = class_getInstanceMethod(self, @selector(becomeFirstResponder));
    Method new = class_getInstanceMethod(self, @selector(__my__becomeFirstResponder));
    method_exchangeImplementations(old, new);
}
@end

不要在任何生产代码中使用这样的事。 另外,我还没有实际测试过这一点,所以因人而异。



Answer 4:

这取决于你如何定制想要的。 我个人希望有一个数字键盘只,但不喜欢数字键盘,所以我用了标准键盘和标准的过滤器,这是该选项的一部分,它拒绝一切不是数字或空格的按键增加或删除。

我不能说苹果是否会喜欢这个,虽然,你将有一个非常困难的时间写自己的行为,它如同其他键盘。 正因如此,它应该被宣布一个坏主意。

根据您的意见更新它听起来更像是你只需要创建很多上的按钮的视图,并用动画选项打开上移动这一观点。 它可能然后有点像从键盘底部向上滑动,并驳回时再滑开。



文章来源: Custom iPhone Keyboard