加载新键盘时从数字键盘上删除“完成”按钮

2024-02-23

好吧,我会尽力解释这一点。我有一个 iPhone 应用程序,它有一个文本字段,用户只能输入数字。那里不是问题。但是,数字键盘上没有完成按钮,所以我无法让它消失。我可以制作一个按钮,用户按下该按钮即可关闭键盘,但我宁愿有一个完成按钮,因为屏幕按原样“忙”。

好吧,经过一番研究,我发现this http://www.neoos.ch/news/46-development/54-uikeyboardtypenumberpad-and-the-missing-return-key。哇,效果很好。但是,我还有另一个需要默认键盘的文本字段。每当键盘出现时,无论哪种类型,它都会显示“完成”按钮。

不好。

所以我做了更多挖掘。仔细阅读评论,人们提到了一种使用“编辑已开始”特征来摆脱“完成”按钮的方法,仅在必要时调用“完成按钮”代码。我也基本上完成了。如果您在数字字段中键入,然后关闭键盘,然后在普通字段中键入,则不会出现“完成”按钮。

但是,存在一个错误,即“完成”按钮仍然出现。如果您点击数字字段,然后点击普通字段,键盘永远不会“消失”,因此即使它从数字键盘变为普通键盘,按钮仍然存在。我想从视图中删除按钮,但我不知道该怎么做。这是我的代码...

//Done button for numpad
- (void)keyboardWillShow:(NSNotification *)note {
    if (showDoneButton == YES)
    {   


    // create custom button
    UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
    doneButton.frame = CGRectMake(0, 163, 106, 53);
    doneButton.adjustsImageWhenHighlighted = NO;
    if ([[[UIDevice currentDevice] systemVersion] hasPrefix:@"3"]) {
        [doneButton setImage:[UIImage imageNamed:@"DoneUp3.png"] forState:UIControlStateNormal];
        [doneButton setImage:[UIImage imageNamed:@"DoneDown3.png"] forState:UIControlStateHighlighted];
    } else {        
        [doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal];
        [doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted];
    }
    [doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];

    // locate keyboard view
    UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
    UIView* keyboard;
    for(int i=0; i<[tempWindow.subviews count]; i++) {
        keyboard = [tempWindow.subviews objectAtIndex:i];
        // keyboard view found; add the custom button to it
        if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
            [keyboard addSubview:doneButton];
    }
        showDoneButton = NO; //This tells done button code to run or not
    }
}

- (void)doneButton:(id)sender {
    NSLog(@"Input: %@", playerOneLifeLabel.text);
    NSLog(@"Input: %@", playerTwoLifeLabel.text);
    [playerOneLifeLabel resignFirstResponder];
    [playerTwoLifeLabel resignFirstResponder];
}

当 NumPadfield 触发“编辑已开始”时,它会调用此函数:

- (IBAction)needNumberPad:(id)sender{
    showDoneButton = YES;
}

然后确保显示完成按钮。当完成按钮代码完成时,变量(如上所示)被设置回“否”,因此如果您点击默认文本字段,它不会再次显示。默认情况下,布尔变量设置为 NO。

需要发生的是,如果您立即从编辑 numPad 字段跳转到默认字段,则“完成”按钮会消失。我可以将代码放入“编辑结束”时调用的函数中,但我不知道该放在那里。帮助将不胜感激,我已经走到这一步了!

谢谢你!


按着这些次序

A。首先将完成的按钮作为类的实例变量,这将帮助您维护对按钮的引用

b.在您的开头添加此代码keyboardWillShow:(NSNotification *)note method

if(!showDoneButton ){
      if(doneButton){
[doneButton removeFromSuperview];
doneButton = nil;
      }
      return;
 }

C。添加 keyBoardWillHide 的通知

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardWillHide:) 
                                             name:UIKeyboardWillHideNotification 
                                           object:nil];

d.在 keyBoardWillHide 方法中执行以下操作

- (void)keyboardWillHide:(NSNotification *)note 
{
if(doneButton)
{
    [doneButton removeFromSuperview];
    doneButton = nil;
}
}

这应该可以解决问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

加载新键盘时从数字键盘上删除“完成”按钮 的相关文章

随机推荐

  • 如何使用 Swift scenekit 在 IOS 上绘制摄像头视频作为背景?

    我正在尝试在 ios 上使用 swift 和 scenekit 开发一个增强现实应用程序 有没有办法将设备摄像头拍摄的视频绘制为场景背景 这对我有用 I used AVFoundation捕获设备摄像头的视频输入 let captureSe
  • Atom 可以与 Python virtualenvwrapper 一起使用吗

    我想启动一个 Flask 应用程序 我安装了 virtualenvwrapper 来管理包 但我无法让 Atom 知道当前项目应该使用 virtualenv 的 python 二进制文件 from flask import Flask re
  • 如何保留同一个Android应用程序的两个版本?

    我们经常看到 Android 应用程序有两个版本 付费版本和免费版本 我还在开发一个想要发布两个版本的应用程序 做这个的最好方式是什么 在我看来 创建两个项目并在其间复制文件似乎不是最好的方法 Use 图书馆计划 http develope
  • Django 中的aggregate() 与 annotate()

    姜戈的QuerySet有两种方法 annotate and aggregate 文档说 与aggregate 不同 annotate 不是终止子句 annotate 子句的输出是一个查询集 https docs djangoproject
  • EVENTTARGET 确定发件人的问题

    我试图找出点击了哪个按钮 这段代码在 IE 中运行得很好 但如果我在 Chrome Firefox 或 Safari 中它不会执行任何操作 在 Firefox 中使用 firebug 时 我查看了表单详细信息 它显示 EVENTTARGET
  • 在 readthedocs 中构建随机失败

    Readthedocs 似乎有一个奇怪的问题 构建失败 没有任何明显的原因 在同一个提交 ID 上 构建一次失败 后来成功 Failure https readthedocs org projects opnfvdocsdemo build
  • 如何在独立的 Turbine 应用程序中激活 /turbine.stream 端点

    我正在尝试创建一个独立的应用程序来从其他应用程序收集 Hystrix 流 但它并没有暴露 turbine stream默认端点 我确信我的项目中缺少什么 Spring Boot 2 0 4 RELEASE Spring Cloud Finc
  • 有没有办法关闭 WebDriver 或 Protractor 中的选项卡?

    有没有办法通过 Protractor 或 WebDriver 物理关闭选项卡 我问是因为虽然我知道如何切换标签 https stackoverflow com questions 26798020 protractor switch to
  • 如何将多个图像上传到 Firebase Storage 并返回多个 downloadURL

    我们正在开发一个简单的电子商务应用程序 我们需要上传多个产品图片 使用 Vuejs 和 Vue Croppa 我们需要将图像上传到 firebase 存储 检索下载 URL 然后在将该产品添加到数据库时将这些 URL 包含在数组中
  • 使用从 ramda 中的原始属性派生的新属性来转换对象

    变换以下对象的最简单方法是什么 original name bob age 24 result name bob age 24 description bob is 24 years old 我可以使用 Lens 来更新单个属性 例如增加年
  • 如何在php中解密sha1?

    下面我使用 sha1 加密了一个字符串变量 现在我希望使用 sha1 函数解密数据 但我要去某个地方 请有人站出来以正确的方式指导我 下面是我的代码 我得到这样的输出 tiger 46e3d772a1888eadff26c7ada47fd7
  • 类型别名的范围是什么?

    Typescript 类型别名的范围是什么 我有这个别名 我想我可能想以某种方式在全球范围内声明它 type ResouceResult
  • 熊猫和 AWS Lambda

    有人有与 AWS Lambda 兼容的完全编译版本的 pandas 吗 搜索了几个小时后 我似乎找不到我要找的东西 而且关于这个主题的文档也不存在 我需要在 lambda 函数中访问该包 但是我未能成功地使该包正确编译以在 Lambda 函
  • 如何从 json 文件中删除 json 对象?

    我想从此 json 文件中删除年龄using org json or com googlecode json simple 假设这个 json 对象位于文件 test json 中 age 100 name mkyong com messa
  • 现代浏览器仍然限制并行下载吗?

    In 这篇雅虎文章 http yuiblog com blog 2007 04 11 performance research part 4 从 2007 年开始 作者认为静态资源应该分布在不同的主机名上 因为浏览器遵循 HTTP 1 1
  • 组件输入更改父级中传递的值

    据我了解 Input组件中的字段应该是单向的 父级到子级 但是 我有一个值要传递给Input然后在组件中修改它 但我注意到它在父级中也发生了变化 这对我来说是有道理的 因为对象是通过引用传递的 但我猜这意味着 Angular 设置的整个 单
  • 针对 Java 5 和 Java 6 的即时、内存中 Java 代码编译

    如何从 Java 5 和 Java 6 中的任意字符串 在内存中 编译 Java 代码 加载它并在其上运行特定方法 预定义 在你对此进行讨论之前 我查看了现有的实现 大多数依赖于 Java 6 编译器 API 那些不这样做的人 只能依靠技巧
  • Heroku:帐户无权访问应用程序

    我试图git pull heroku master 但我得到了 Your account email protected cdn cgi l email protection does not have access to app name
  • tailwindcss:强制 tailwind 使用兼容的 RGB 语法?

    我正在使用 tailwindcss 移植一个应用程序以与 IE11 一起使用 不幸的是 tailwindcss 坚持使用现代技术生成颜色W3C CSS 颜色模块级别 4 rgb https drafts csswg org css colo
  • 加载新键盘时从数字键盘上删除“完成”按钮

    好吧 我会尽力解释这一点 我有一个 iPhone 应用程序 它有一个文本字段 用户只能输入数字 那里不是问题 但是 数字键盘上没有完成按钮 所以我无法让它消失 我可以制作一个按钮 用户按下该按钮即可关闭键盘 但我宁愿有一个完成按钮 因为屏幕