iOS数字键盘,可打开文本键盘

iOS数字键盘,可打开文本键盘,ios,swift,keyboard,numpad,Ios,Swift,Keyboard,Numpad,我有一个文本字段,当用户开始键入时,我希望有这样一个键盘: 请同时观看以下视频: 正如您在本视频中看到的,有一个“ABC”键可以帮助用户从数字键盘切换到文本。当在文本中按“123”时,键盘也会从文本切换到数字键盘。我想知道他们是怎么做到的 我找到的唯一解决方案是向键盘添加一个子视图,如下所述: 但当用户使用自定义键盘时,这种方法可能不起作用。也不适用于从文本切换到数字键盘 或者作为另一种解决方案,我知道accessoryInputView,但这与视频不同。它在键盘上方添加了一个工具栏 有人知

我有一个文本字段,当用户开始键入时,我希望有这样一个键盘:

请同时观看以下视频:

正如您在本视频中看到的,有一个“ABC”键可以帮助用户从数字键盘切换到文本。当在文本中按“123”时,键盘也会从文本切换到数字键盘。我想知道他们是怎么做到的

我找到的唯一解决方案是向键盘添加一个子视图,如下所述:

但当用户使用自定义键盘时,这种方法可能不起作用。也不适用于从文本切换到数字键盘

或者作为另一种解决方案,我知道
accessoryInputView
,但这与视频不同。它在键盘上方添加了一个工具栏


有人知道本视频中使用的解决方案吗?

我在键盘上添加了逗号按钮

键盘也是一个简单的ui视图,其中包含控件

- (UIView *) findKeyboard {
    for (UIWindow* window in [UIApplication sharedApplication].windows) {
        UIView *inputSetContainer = [self viewWithPrefix:@"<UIInputSetContainerView" inView:window];
        if (inputSetContainer) {
            UIView *inputSetHost = [self viewWithPrefix:@"<UIInputSetHostView" inView:inputSetContainer];
            if (inputSetHost) {
                UIView *kbinputbackdrop = [self viewWithPrefix:@"<_UIKBCompatInput" inView:inputSetHost];
                if (kbinputbackdrop) {
                    UIView *theKeyboard = [self viewWithPrefix:@"<UIKeyboard" inView:kbinputbackdrop];
                    return theKeyboard;
                }
            }
        }
    }

    return nil;
}
注意:这是旧代码在我的旧项目中工作,而不是在新项目中测试

- (void) keyboardWillShow:(NSNotification *)note {
    // create custom button

    dispatch_async(dispatch_get_main_queue(), ^{
        // Some code
        UITextField *txt = (UITextField *)[self.view findFirstResponder];
        if (txt.keyboardType == UIKeyboardTypeDecimalPad) {
            UIButton * btnComma = [UIButton buttonWithType:UIButtonTypeCustom];
            [btnComma setTag:15000];

            UIView* keyboard = [self findKeyboard];

//            btnComma.frame = CGRectMake(0, 162, 126, 54);

            btnComma.frame = [self findKeySizeForView:keyboard];







            if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
                [btnComma setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, 20, 0)];
            }

            [btnComma setBackgroundColor:[UIColor colorWithHexString:@"CBD0D6"]];
            btnComma.adjustsImageWhenHighlighted = NO;
            [btnComma setTitle:@"." forState:UIControlStateNormal];
            [btnComma setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
            [btnComma.titleLabel setFont:[UIFont systemFontOfSize:35.0f]];
            [btnComma addTarget:self action:@selector(commaBtnTapped) forControlEvents:UIControlEventTouchUpInside];

            [keyboard addSubview:btnComma];
            btnComma = nil;
        }
    });
}
- (UIView *) viewWithPrefix:(NSString *)prefix inView:(UIView *)view {
    for (UIView *subview in view.subviews) {
        if ([[subview description] hasPrefix:prefix]) {
            return subview;
        }
    }
    return nil;
}
此方法用于从ui窗口查找键盘

- (UIView *) findKeyboard {
    for (UIWindow* window in [UIApplication sharedApplication].windows) {
        UIView *inputSetContainer = [self viewWithPrefix:@"<UIInputSetContainerView" inView:window];
        if (inputSetContainer) {
            UIView *inputSetHost = [self viewWithPrefix:@"<UIInputSetHostView" inView:inputSetContainer];
            if (inputSetHost) {
                UIView *kbinputbackdrop = [self viewWithPrefix:@"<_UIKBCompatInput" inView:inputSetHost];
                if (kbinputbackdrop) {
                    UIView *theKeyboard = [self viewWithPrefix:@"<UIKeyboard" inView:kbinputbackdrop];
                    return theKeyboard;
                }
            }
        }
    }

    return nil;
}
-(UIView*)findKeyboard{
用于(UIWindow*窗口,位于[UIApplication sharedApplication].windows中){

UIView*inputSetContainer=[self-viewWithPrefix:@"在我以前的项目中,我在键盘上添加了自定义按钮。但它是Objc代码。你是通过在uiwindow中添加子视图来添加它的吗?不,在键盘上!!!你可以共享代码吗?可能你也可以查看自定义键盘扩展名findKeySizeForView,如果用户使用自定义按钮,它可能无法正常工作。我是对的吗?可能是正确的按钮在自定义按钮中,关键键是一个。findKeySizeForView是一种从键盘获取按钮精确大小的方法!!因此,
btnComma.frame
是从该函数的返回大小分配的。让我试试。我想代码可以工作,但担心自定义键盘,但我也会用自定义键盘进行测试。让我花点时间。@HuseinBehboodiRad祝你好运!!请你看看这段视频:他们似乎没有在键盘上添加子视图。我想知道他们在做什么?