iOS 自动在文本字段中添加连字符

2024-02-18

我正在学习 iOS 开发,并且很难弄清楚控件的各种事件。对于测试,我有一个 UITextField,用户需要输入以下格式的字符串: XXXX-XXXX-XXXX-XXXX

我希望能够检查每个条目后字段中的文本有多长,并查看是否需要附加连字符。我已经为此设置了 IBAction 函数,但是当我将其分配给“值更改”事件时,它什么也不做,当我将其设置为“编辑结束”时,它工作正常,但只有在用户退出时才会调用控制。

只是补充一下,“编辑已更改”事件也会导致它崩溃。我认为这是堆栈溢出或文本设置再次调用事件处理程序的情况。

简而言之,有没有办法为用户每次在 UITextField 中输入字符时设置事件处理程序?


请注意,之前的答案严重不足。天堂禁止您的用户输入错误的数字并敢于尝试删除它!公平地说,发帖者指出该代码可能无法完美运行。但是,它甚至无法编译,因此买家要注意过滤器应该已经很高了。如果您修复编译错误并尝试代码,您会发现您很容易得到与海报规定的格式不匹配的输入。

这是我用来将文本字段限制为格式为 123-456-7890 的电话号码的解决方案。调整其他数字格式很简单。注意传递的使用NSRange。顺便说一句,即使使用数字虚拟键盘,也需要拒绝非数字字符,因为用户仍然可以通过硬件键盘输入非数字。

另一张纸条。我添加连字符after输入第 4 位和第 7 位数字可以使删除数字变得更容易一些。如果在第 3 位和第 6 位数字之后添加,则必须处理删除悬空连字符的情况。下面的代码避免了这种用例。

// Restrict entry to format 123-456-7890
- (BOOL)                textField:(UITextField *)textField
    shouldChangeCharactersInRange:(NSRange)range
                replacementString:(NSString *)string {

  // All digits entered
  if (range.location == 12) {
    return NO;
  }

  // Reject appending non-digit characters
  if (range.length == 0 &&
       ![[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[string characterAtIndex:0]]) {
    return NO;
  }

  // Auto-add hyphen before appending 4rd or 7th digit
  if (range.length == 0 &&
      (range.location == 3 || range.location == 7)) {
    textField.text = [NSString stringWithFormat:@"%@-%@", textField.text, string];
    return NO;
  }

  // Delete hyphen when deleting its trailing digit 
  if (range.length == 1 &&
      (range.location == 4 || range.location == 8))  {
    range.location--;
    range.length = 2;
    textField.text = [textField.text stringByReplacingCharactersInRange:range withString:@""];
    return NO;
  }

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

iOS 自动在文本字段中添加连字符 的相关文章

  • ios 8 核心数据崩溃

    保存时 CoreData 发生崩溃 2014 09 16 09 51 58 273 My app 2678 105246 Terminating app due to uncaught exception NSInvalidArgument
  • 如何保存 1 个 xcode 项目中的所有构建设置并在其他 xcode 项目上使用它们?

    我使用 xcode 4 5 和 cordova phonegap 来构建我的应用程序 我投入了大量时间来获取适合我的 Xcode 项目的构建设置 并且我想在我正在构建的多个应用程序上重用这些设置 我正在寻找是否有一种快速的方法来导出这些设置
  • 删除后台 moc 中的对象然后在主 moc 中刷新它会导致 NSFetchedResultsController 更新崩溃

    我遇到了一个NSObjectInaccessibleException我无法理解 Terminating app due to uncaught exception NSObjectInaccessibleException reason
  • 在 UITableviewCell 高度动画的同时动画 CALayer 阴影

    我有一个 UITableView 我正在尝试使用它来展开和折叠beginUpdates and endUpdates方法并在发生时显示阴影 在我的自定义 UITableViewCell 中 我有一个图层 我为其创建阴影layoutSubvi
  • 使用 JavaScript 从 URL 变量读取来加载不同的 CSS 样式表

    我试图在我的 WordPress 博客上使用两个不同的样式表 以便在通过 Web 访问页面时使用一个样式表 而在通过我们的 iOS 应用程序访问博客内容时使用另一个样式表 现在 我们将 app true 附加到来自 iOS 应用程序的 UR
  • 为什么我们在 @synchronized 块中传递 self ?

    我猜 synchronized 块不依赖于对象 而是依赖于线程 对吗 既然如此 我们为什么要传递 self 呢 synchronized是语言提供的用于创建同步作用域的构造 因为使用简单的全局共享互斥锁效率非常低 因此序列化每个单独的互斥锁
  • 跟踪所有 ObjC 方法调用?

    有时 当查看别人的大型 Objective C 程序时 很难知道从哪里开始 在这种情况下 我认为记录对每个非 Apple 方法的每次调用会很有帮助 有没有办法做到这一点 基本上 在某个中心位置进行一项更改 并记录调用的每个方法 最好仅限于非
  • iPhone,使用 isKindOfClass 是否被认为是不好的做法?

    例如 如果有一个 处理所有 类型的方法 if obj isKindOfClass class1 else if obj isKindOfClass class2 etc 这是不好的做法吗 是否有更简洁的替代方案或更好的方法来构建代码 在运行
  • 在界面生成器/故事板中设置 UIButton 图像

    我有一个视图控制器 我在故事板中添加了一个圆形矩形按钮 该应用程序运行良好 我还使用故事板将按钮连接到 segue 我正在尝试为此按钮设置一个自定义图像以用于其开和关状态 我如何访问此按钮并设置其属性 在本例中为开和关图像 这是一个屏幕截图
  • 使用 UIActionSheet 更改视图时工具栏项目消失

    当从 a 启动视图时UIActionSheet按钮 通过导航栏后退按钮返回视图后 工具栏虽然仍然可见 但上面没有任何以前的按钮 自从更新到 iOS 6 以来 这个错误就出现了 并且是在模拟器和仅运行 iOS 6 的设备上测试时发生的 如果我
  • iOS 开发: [[self navigationController] viewControllers]; 有哪些原因?会返回零吗?

    以下语句返回零 NSArray viewControllersInNavStack self navigationController viewControllers 这个语句是在导航堆栈中大约四层深度的视图控制器中调用的 所以我不明白它如
  • iOS 外部附件框架:如何获取特定 MFI 设备的协议字符串

    我正在编写一个 iOS 应用程序 用于与 mini mPlay Drumi MP18B 小型蓝牙扬声器 进行通信 据我所知 showBluetoothAccessoryPickerWithNameFilter仅显示协议字符串添加到 Info
  • WebGL iOS 渲染为浮点纹理

    我正在尝试在 iOS Safari 上的 WebGL 中渲染浮点纹理 而不是在本机应用程序中 我已经设法让 iOS 读取手动 例如从 JavaScript 创建的浮点纹理 但是当我创建浮点类型的帧缓冲区并使用 GPU 渲染到其中时 它不起作
  • 在 Interface Builder 中的资产目录上使用图像

    是否可以直接在界面生成器上使用添加到资产目录中的图像 这是怎么做到的 在 UIImageView 属性上 我看不到任何引用资产目录上任何图像的选项 Import the images into the xcassets folder 单击右
  • iOS 中的等宽字体是什么?

    我想要在我的 iOS 应用程序中为 UILabel 使用等宽字体 不幸的是 我找不到一个 甚至 美国打字机 实际上也不是等宽的 XCode 中可用的等宽字体是什么 iOS 等宽字体 Courier Courier Bold Courier
  • 如何将十六进制数组转换为 UIImage?

    有几个与使用 P25mi 动态打印图像相关的未解答问题 没有一个得到公认的答案 下面有几个链接 如何将图像转换为位图代码以便在 iPhone 中进行蓝牙打印 https stackoverflow com questions 1383828
  • 在模拟器中运行应用程序时删除本地通知的 iOS 权限警报

    我正在尝试编写验收测试KIF https github com kif framework KIF在一个很早就要求本地通知权限的应用程序上 不幸的是 由于 iOS 模拟器安全原因无法使用 KIF 自动接受 iOS 权限警报 https gi
  • UIImage:如何获取网站选项卡图标

    我正在开发一个 RSS 阅读器 我需要获取每个提要的图标 例如 如果我的提要是 google com 我想获取 G 图标并将其放入 UIImage 或其他内容中 关于如何实现这一目标有什么想法吗 最简单的方法是使用 Google NSStr
  • 增加 NSData 的长度

    基本上 我有一个 46 个字符的 NSString 我将其转换为 NSData 我需要将字符串填充到 48 个字符 仅在 NSString 末尾添加 是行不通的 所以 我只是使用以下方法增加了 NSData 的长度 NSString str
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p

随机推荐

  • Bookdown:单个 html 输出文件

    如果我在第一行下面添加一行 output yml bookdown gitbook split by none css in the bookdown 演示 https github com rstudio bookdown demo输出变
  • 在vim中,我如何回到搜索之前的位置?

    在 vim 中编程我经常去搜索一些东西 拉出它 然后返回到我所在的位置 插入它 修改它 问题是 在我搜索并找到之后 我需要手动找到回到原来位置的路 有没有一种方法可以自动返回到我上次搜索时所在的位置 Ctrl O takes me to t
  • 通过 Safari 打开时,Firebase 动态链接不会重定向到应用程序

    我已经添加了Firebase Dynamic Link在我的应用程序中 当我打开iPhone链接通过Google Chrome 它会将我重定向到应用程序 但是当我尝试通过以下方式打开应用程序时Safari 我通过 Notes 打开链接 而不
  • 使用GD PHP给PNG图像加水印时出现部分黑色背景

    我已经拼凑了一个 PHP 类来使用 PHP 的 GD 函数执行各种与图像相关的功能 它适用于所有图像类型 旋转 翻转 调整大小 裁剪以及较小程度的水印 除后者外 所有这些都可以完美运行 例如 经过一些更改后 旋转的 PNG 图像保留了透明度
  • 在 Windows 8 Metro C# 中显示存储文件

    我想在 UI 上显示资产中的图像文件 我设法将该项目存储为StorageFile 我怎样才能显示它 我尝试在 XAML 中显示它
  • 每当存在具有焦点的只读文本框时,无法检测到按键事件上的 Ctrl + 键快捷键

    我以为我自己解决了这个问题 但它又回来困扰我的应用程序 所以这里是 我在带有几个禁用和只读文本框的表单中注册了以下 keydown 事件处理程序 它们只是按钮的简单快捷方式 private void AccountViewForm KeyD
  • ffmpeg 用于将视频编码为 H264 编解码器格式

    我有一个 mp4 视频文件 MPEG4 视频编解码器 我试图在 Linux 上使用 ffmpeg 将其转换为 H264 视频编解码器格式 原始 h 264 格式 版本 FFmpeg 版本 SVN r0 5 1 4 0 5 1 1ubuntu
  • 如何注册我的 Android 应用程序来解析网站

    我应该如何注册我的 Android 应用程序 或 设备来解析推送站点以获取通知 现在我已连接到 GCM 我无法继续使用解析来注册我的设备 这是基于标准推送通知实现官方 Parse SDK 的最佳方法我的经历 and 多次尝试和错误并且许多
  • 音乐分析和可视化

    我对用 Python 编写音乐可视化工具感兴趣 第一个问题是如何从音乐中获取信息 如音量 频率 转速等 从哪里来 来自声卡还是实际的音乐文件 我的猜测是来自声卡 但是我如何访问声卡和想要的信息 最好以独立于平台的方式 Linux 是必须的
  • IOS:使用 NSUserDefault 存储数组

    我想存储一个数组NSUserDefault 然后 我输入applicationDidEnterBackground NSUserDefaults standardUserDefaults setObject myArray forKey m
  • 递推的复杂度 T(n)=T(n/2T(n/2)+n^2?

    根据主定理 这个递归是 n 2 但是如果我们用树递归来解决这个问题 那么解就是 n 2 logn 难道我做错了什么 如果递推关系为 T n 2T n 2 n 2 那么您处于主定理的第三种情况 并且正则性条件适用 因此 T n Theta n
  • Firebase Crashlytics 无效密钥错误

    我想将 Firebase Crashlytics 集成到我的 Android 游戏中 使用 Cocos2D X 引擎开发 我已按照中提到的步骤进行操作这个链接 https firebase google com docs crashlyti
  • osx 和 clion,找不到 omp.h

    如何说服 cmake 在 CLion 内 我有可用的 OpenMP 标头 我正在尝试编译这个项目SCD https github com DAMA UPC SCD我收到以下错误 15 Building CXX object tools se
  • 通过使用 tibble 中不同行的值来改变值

    我想计算一个节点到根的距离dtr 我拥有的只是一个向量 其中包含每个节点的父节点 idrel 在这个例子中id 7是根 library tidyverse tmp lt tibble id 1 12 rel c 2 7 4 2 4 5 7
  • 如何向宿主元素添加“类”?

    我不知道如何添加到我的组件中
  • 用 scala 替换列表中的元素

    如何用不可变列表按索引替换元素 E g val list 1 2 3 4 List list replace 2 5 如果你想替换索引2 那么 list updated 2 5 Gives 1 2 5 4 Nil 如果你想找到所有有 2 的
  • 无法在 Android Studio 中创建 Android 项目(I/0 预览版)130.737825 (Mac)

    我今天打开 Android Studio 它要求升级到最新版本 我照做了 现在我无法创建新项目 我按照向导创建了一个项目 并完成了项目的创建 但结果不是我所期望的 并且我在控制台中收到错误 我得到的错误是 Can t deserialize
  • LINQ to Entities 无法识别方法 'Int32 Last[Int32]

    这有什么问题吗 int folderid from p in db folder where p isDefault true select p id Last 我收到这个错误 LINQ to Entities does not recog
  • 解码错误 - 预期解码 Dictionary 但发现了一个数组

    我是 swift 编程和 Xcode 的新手 我尝试使用 Json 编码将 mysql 数据从数据库调用到 Xcode 我能够成功调用所有数据 数组 但是当我决定仅调用一个值 列 例如 Courses name 时 我收到 解码错误 预期解
  • iOS 自动在文本字段中添加连字符

    我正在学习 iOS 开发 并且很难弄清楚控件的各种事件 对于测试 我有一个 UITextField 用户需要输入以下格式的字符串 XXXX XXXX XXXX XXXX 我希望能够检查每个条目后字段中的文本有多长 并查看是否需要附加连字符