iOS8数字键盘加左下角完成button

iOS8数字键盘加左下角完成button

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

iOS8数字键盘加左下角完成button的核心代码如下面:

- (void)addDoneButtonToNumPadKeyboard
{
    UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
    if (systemVersion < 8.0){
        doneButton.frame = CGRectMake(0, 163, 106, 53);
    }else{
        doneButton.frame = CGRectMake(0, SCREEN_SIZE.height-53, 106, 53);
    }
    doneButton.tag = NUM_PAD_DONE_BUTTON_TAG;
    doneButton.adjustsImageWhenHighlighted = NO;
    [doneButton setTitle:@"完毕" forState:UIControlStateNormal];
    [doneButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];
    
    NSArray *windowArr = [[UIApplication sharedApplication] windows];
    if (windowArr != nil && windowArr.count > 1){
        UIWindow *needWindow = [windowArr objectAtIndex:1];
        UIView *keyboard;
        for(int i = 0; i < [needWindow.subviews count]; i++) {
            keyboard = [needWindow.subviews objectAtIndex:i];
            NSLog(@"%@", [keyboard description]);
            if(([[keyboard description] hasPrefix:@"<UIPeripheralHostView"] == YES) || ([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) || ([[keyboard description] hasPrefix:@"<UIInputSetContainerView"] == YES)){
                
                UIView *doneButtonView = [keyboard viewWithTag:NUM_PAD_DONE_BUTTON_TAG];
                if (doneButtonView == nil){
                    [keyboard addSubview:doneButton];
                }
            }
        }
    }
}

-(void)removeDoneButtonFromNumPadKeyboard
{
    UIView *doneButton = nil;

    NSArray *windowArr = [[UIApplication sharedApplication] windows];
    if (windowArr != nil && windowArr.count > 1){
        UIWindow *needWindow = [windowArr objectAtIndex:1];
        UIView *keyboard;
        for(int i = 0; i < [needWindow.subviews count]; i++) {
            keyboard = [needWindow.subviews objectAtIndex:i];
            if(([[keyboard description] hasPrefix:@"<UIPeripheralHostView"] == YES) || ([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) || ([[keyboard description] hasPrefix:@"<UIInputSetContainerView"] == YES)){
                doneButton = [keyboard viewWithTag:NUM_PAD_DONE_BUTTON_TAG];
                if (doneButton != nil){
                    [doneButton removeFromSuperview];
                }
            }
        }
    }
}

注:

1.iOS8之后,键盘view的description变为以<UIInputSetContainerView开头,所以须要在推断的逻辑中加上这一项。

2.iOS8之后。键盘view的大小变成了整个屏幕的大小。所以须要对button加入的位置进行适配。

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116821.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月15日 上午7:00
下一篇 2022年1月15日 上午8:00


相关推荐

  • 国产FPGA那家强

    国产FPGA那家强国产 FPGA 那家强写了这么多 FPGA 的文章却从来没有涉及过国产 FPGA 很多网友甚至不知道还有国产 FPGA 下面列举一些国产 FPGA 排名不分先后 标题只是噱头 内容如有侵权 请联系小编进行删除 1 西安智多晶微电子有限公司西安智多晶微电子有限公司总部位于西安 北京设立有 EDA 软件研究中心 目前已实现 55nm 40nm 工艺中密度 FPGA 的量产 并针对性推出了内嵌 Flash SDRAM 等集成化

    2026年3月26日
    2
  • Python ‘gbk’ codec can’t decode byte 0x80[通俗易懂]

    Python ‘gbk’ codec can’t decode byte 0x80[通俗易懂]Python‘gbk’codeccan’tdecodebyte0x80前段时间,运行得好好的Python代码突然抛出如下错误:Traceback(mostrecentcalllast):File&quot;C:\***\tools.py&quot;,line367,in__get_key_from_symline=file.readline()F…

    2025年8月31日
    10
  • js中offsetParent详解

    js中offsetParent详解1 offsetParent 返回元素的偏移容器 定义 offsetParent 就是距离该子元素最近的进行过定位的父元素 position absolute relative fixed 如果其父元素中不存在定位则 offsetParent 为 body 元素 2 根据定义分别存在以下几种情况 1 元素自身有 fixed 定位 父元素不存在定位 则 offsetParent 的结果为 null firefox 中为 body 其他浏览器返回为 null 2 元素自身无 fixed 定位 且父元素也不存在定位

    2026年3月19日
    3
  • 详细讲解回溯算法(一)

    详细讲解回溯算法(一)本篇博文先不根据样例讲解算法 我会在接下的博文中一一讲解回溯法的具体运用 这里先详细讲解回溯算法的原理和思路 在了解回溯算法之前 先对回溯算法中涉及的知识点的概念先讲解下 方便理解博文 哈哈大家不要嫌啰嗦 可能都想直接了解什么是回溯法 但基础不好 后面的运用又怎能彻底掌握呢 不要嫌麻烦 多点耐心 这个其实很容易就理解的 嗷嗷嗷 1 1 问题的解空间一个复杂问题的解决方案是由若干

    2026年3月19日
    2
  • 如何正确设置Java线程池参数?「建议收藏」

    如何正确设置Java线程池参数?「建议收藏」如何正确设置Java线程池参数?前言:在上篇文章我已经给读者介绍了Java线程池的基本使用,以及参数的定义。你真的了解Java线程池参数的含义吗本文我们更进一步,来聊聊在实际的工作中如何设置Java线程池参数的。当我们自定义线程池的时候corePoolSize、maximum…

    2022年5月29日
    49
  • 索尼a5100微单参数_索尼微单a5100拍摄教程

    索尼a5100微单参数_索尼微单a5100拍摄教程入门的第一款微单—SONYa51002018-11-1109:33:0012点赞20收藏33评论开篇:这一刻我想将你永恒定格上帝给我我们一双黑色的眼睛,让我们用它来寻找光明。在寻找光明的途中我们发现光和影这一双神奇的上帝之手,让我们生活的环境变得那么的美好。有无数个美好的瞬间在我们眼前,多么希望将这个美好定格,留下这美丽的瞬间。正文:咔嚓之间将你定格——入门的第一款相机说到相机可谓是百家争…

    2025年6月7日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号