设置 UITextField 的最大字符长度

2023-11-22

如何设置一个文件的最大字符数UITextField当我加载一个iPhone SDK时UIView?


虽然UITextField类没有最大长度属性,通过设置文本字段的值来获得此功能相对简单delegate并实现以下委托方法:

Objective-C

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    // Prevent crashing undo bug – see note below.
    if(range.length + range.location > textField.text.length)
    {
        return NO;
    }
        
    NSUInteger newLength = [textField.text length] + [string length] - range.length;
    return newLength <= 25;
}

Swift

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
    let currentCharacterCount = textField.text?.count ?? 0
    if range.length + range.location > currentCharacterCount {
        return false
    }
    let newLength = currentCharacterCount + string.count - range.length
    return newLength <= 25
}

在文本字段更改之前,UITextField 会询问委托是否指定的文本should被改变。此时文本字段尚未更改,因此我们获取它的当前长度和我们要插入的字符串长度(通过粘贴复制的文本或使用键盘键入单个字符)减去范围长度。如果该值太长(本例中超过 25 个字符),则返回NO来禁止改变。

在文本字段末尾输入单个字符时,range.location将是当前字段的长度,并且range.length将为 0,因为我们不会替换/删除任何内容。插入到文本字段的中间只是意味着不同的range.location,粘贴多个字符只是意味着string其中有多个字符。

删除单个字符或剪切多个字符由range具有非零长度和空字符串。替换只是用非空字符串进行范围删除。

关于崩溃的“撤消”错误的说明

正如评论中提到的,存在一个错误UITextField这可能会导致崩溃。

如果您粘贴到字段中,但验证实现阻止了粘贴,则粘贴操作仍会记录在应用程序的撤消缓冲区中。如果您随后触发撤消(通过摇动设备并确认撤消),UITextField将尝试替换该字符串thinks它用空字符串粘贴到自身中。这会崩溃,因为它永远不会actually将字符串粘贴到自身中。它将尝试替换字符串中不存在的部分。

幸运的是,您可以保护UITextField免得像这样自杀。您只需要确保它建议替换的范围does存在于其当前字符串中。这就是上面的初始健全性检查的作用。

swift 3.0 复制和粘贴工作正常。

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        let str = (textView.text + text)
        if str.characters.count <= 10 {
            return true
        }
        textView.text = str.substring(to: str.index(str.startIndex, offsetBy: 10))
        return false
    }

希望对您有帮助。

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

设置 UITextField 的最大字符长度 的相关文章

  • 有没有办法更改 UITabBar 或 UITabBarItem 中的文本位置?

    这是我打算放在屏幕上的自定义选项卡栏 然而 我的搭档希望文字稍微向上一些 我怎样才能这样做呢 为什么不为视图控制器设置一个空的标题属性 并将标题添加到选项卡的自定义图像中 UPDATE 为了回答的完整性 来自评论和ios标签栏在没有图像时将
  • 从 RemoteIO 录制到 AAC:数据正在写入,但文件无法播放

    我一直在尝试从 iPad 2 上的 iOS 5 中的 renderCallback 中直接从 RemoteIO 单元录制到 AAC 我看到了相互矛盾的信息 说这是不可能的 但这是可能的 在评论中 here http atastypixel
  • 保存一页数据并将该数据添加到 tableView

    大家好 我有 2 个视图 第一个有 UITableView 第二个有一个文本字段 当用户按下第二页上的 保存 按钮时 我希望将文本字段文本添加到 tableView 中 这是我正在使用的代码 IBAction saveButton id s
  • 填充 UIScrollView 的垂直空间

    我正在研究一个具有UIScrollView 我想要做的是将标签固定在可滚动区域的顶部 并将按钮固定在底部 两者之间的空间最小 这个想法是 如果标签的高度增加 按钮将被向下推 以便用户必须向下滚动才能找到它 但是 如果标签很短 则标签和按钮之
  • Swift 自定义 UITableViewCell 标签始终为零

    我已经被这个问题困扰好几天了 所以如果有人能提供帮助 我会很高兴 我正在尝试创建一个动态 UITableView 为此我创建了一个自定义 UITableView 子类 并且还创建了一个自定义 UITableViewCell 子类 因为我需要
  • 如何使用所有类型的 UTI 初始化 UIDocumentPickerViewController

    我想打开 UIDocumentPickerViewController 并且它应该允许用户选择所有类型的文件 我尝试在 UIDocumentPickerViewController init 方法中提及所有 UTI 但仍然找不到某些文件 如
  • 获取 UIView 的视图控制器(iphone)

    我这样做是为了获得视图 self superview viewWithTag 10 但我怎样才能获得该视图的视图控制器 就像您可以获得视图控制器的视图一样 我想采用另一种方式 以便我可以向该视图控制器发送消息 调用方法 例如 self su
  • MFMailcomposeviewcontroller 发送按钮被禁用

    有没有人遇到这样的问题MFMailcomposeviewcontroller发送按钮被禁用 变灰 取消按钮工作得很好 这似乎是一个新错误 如果本机邮件应用程序从 iPhone 中删除 从 iOS 10 开始允许 则可能会发生这种情况 在这种
  • UITouch移动速度检测

    我正在尝试检测触摸移动的速度 但并不总能得到我期望的结果 补充 速度峰值太多 任何人都可以发现我是否在做一些时髦的事情或建议更好的方法吗 void touchesBegan NSSet touches withEvent UIEvent e
  • iPhone iOS 是否有用于类似代数计算器的应用程序的表达式解析器?

    我正在构建一个应用程序 可以通过加速度计和陀螺仪输出来分析手机的运动 我很可能会将这个动作捕获为一组变量 应用程序将在内部跟踪这些变量 我试图提供一种方法来绘制这些变量和涉及这些变量的方程 我想让用户能够通过输入 a b c d 等方程 其
  • React Native 图像选择器图像上传在 iOS 上不起作用

    我在通过 fetch 和 react native image picker 将图像上传到 Multer 和 Express 后端时遇到问题 下面是我的 React Native 代码 try const data new FormData
  • 外观代理 - iOS 5 的 setShadowImage 替代品?

    您好 我正在使用此代码来设置导航栏的阴影图像 if self navigationController navigationBar respondsToSelector selector shadowImage UINavigationBa
  • 自定义过渡动画在animationControllerForPresentedController和animateTransition之间未知延迟

    我的目标是使动画在第一个视图控制器中开始并在第二个视图控制器中结束 我正在尝试使用符合以下条件的对象进行过渡动画UIViewControllerAnimatedTransitioning and UIViewControllerTransi
  • 如何确定当前处于活动状态的视图控制器/显示视图的视图控制器?

    在我的应用程序中 我正在排队一些本地通知 当它们触发时我必须呈现模式视图 问题是我有许多视图控制器 其中任何一个当前都可能处于活动状态 因此需要呈现模式视图控制器 如何确定当前正在使用哪一个 我将导航控制器设置为 Windows 根视图控制
  • 如果在系统设置中关闭隐藏式字幕,则不会显示字幕

    我正在尝试显示字幕 无论设备在辅助功能下设置了什么 目前 如果设备设置为英语并在设置中启用隐藏式字幕 则将播放英语字幕 如果设备设置为西班牙语 则将播放西班牙语字幕 我希望无论隐藏式字幕是否打开 都能播放字幕 我尝试添加这段代码 https
  • 验证 iOS 应用程序时出现 com.apple.developer.linked-domains 问题

    当我在 Xcode 中使用 Organizer 验证我的项目时 出现以下错误 无效的代码签名权利 你的申请包的签名包含代码签名权利iOS 上不支持的 具体来说 值 for key com apple developer associated
  • 无法创建本机类型“NSObject”的实例

    我在执行下面的代码时遇到此错误 未能创建本机类型的实例 NSObject 可以通过将 Class ThrowOnInitFailure 设置为 false 来忽略此情况 var alert new UIAlertView Error Som
  • phonegap:基于 cookie 的身份验证 (PHP) 不起作用 [webview]

    我正在开发一个移动网络应用程序 使用 sencha touch HTML5 和 Phonegap 作为包装器 我正在使用 PHP 身份验证 Cookie 和 ajax 请求 在 safari 或 chrome 上一切正常 但在使用phone
  • 快速从 RSS feed 获取 img url

    我希望能够从一段字符串中检索 img url 以下是我尝试检索的 img URL 的示例 p img width 357 height 500 src http images sgcafe net 2015 05 OVA1 357x500
  • NSCF 数组越界?

    我有一个相当简单的应用程序 使用 Core Data 和几个数组控制器 在 IB 中 除了 xcdatamodel 文件之外 没有它们的代码文件 当我运行应用程序时 我在日志中收到以下错误 应用程序仍然运行 但在转到 文件 gt 新文档 之

随机推荐

  • 在 Android 7(API 级别 24)中,我的应用程序不允许将手机静音(将铃声模式设置为静音)

    我有一个应用程序 通过使用 AudioManager 并将铃声模式设置为静音 使用以下代码将手机静音 AudioManager audioManager AudioManager context getSystemService Conte
  • 奇怪的类声明

    在 Qt 的 qrect h 中 我发现类声明是这样开始的 class Q CORE EXPORT QRect 正如你所看到的 class 关键字后面有两个标识符 我该如何理解这一点 谢谢 Q CORE EXPORT is 扩展为不同值的宏
  • PDO - 获取当前插入的ID

    query INSERT INTO news VALUES NULL param1 param2 stmt pdo gt prepare query params array param1 gt p title param2 gt p bo
  • 如何在指定节点TOC(.NET)上打开CHM文件

    您好 我需要在 NET 应用程序中实现上下文帮助 我有 chm 文件 我正在寻找在标准查看器中打开它的可能性 并突出显示目录 或索引条目 所需的主题 知道如何存档吗 EDIT 也许用于打开 CHM 文件的 MS 应用程序有一些允许存档的命令
  • 使用 Pylint 显示错误和警告

    所以我开始使用 Pylint 但由于我使用制表符而不是空格 它给了我警告 也因为一些方法来自基类 它们也是 GalleryUi 的实例 没有 setModel 成员 而它有 QAbstractTableModel作为基类 那么我如何设置 P
  • Solidity:如何将 bytes32 表示为字符串

    这在其他语言中可能很简单 但我不知道如何在 Solidity 中做到这一点 我有一个bytes32像这样0x05416460deb76d57af601be17e777b93592d8d4d4a4096c57876a91c84f4a712 I
  • 如何使用 Eclipse 编译 32 位

    我目前正在我的 64 位 Ubuntu 电脑上用 C 编写一个小程序 默认情况下 eclipse 会编译 64 位架构的程序 因为我想在我的服务器上使用我的小程序 仍然是 32 位 所以我需要能够编译 32 位程序 我怎样才能在日食中做到这
  • 从其他视图拖动时检测视图上的触摸事件

    如果用户触摸视图 A 并拖动到视图 B 的底部 如何检测触摸事件 我想检测视图 B 中的触摸事件 我在视图 B 中添加了触摸监听器 但如果用户最初触摸 A 并将其拖动到 B 上 则不会收到事件 您可以使用下面的代码来实现您的请求 测试视图边
  • 如何在 Pygame 中截取屏幕的特定部分

    有没有办法可以截取 pygame 窗口右半部分的屏幕截图 我正在使用 pygame 制作游戏 我需要拍摄屏幕快照 但不是整个屏幕 只是右半部分 我知道 pygame image save screen screenshot jpg 但这将包
  • 计算地理邻近度的公式

    我需要在我的应用程序中实现地理邻近搜索 但我对使用的正确公式感到非常困惑 经过在网络和 StackOverflow 中的一些搜索 我发现解决方案是 Use the 半正矢公式 Use the Great Circle Distance Fo
  • .net 中的转换:本机 Utf-8 <-> 托管字符串

    我创建了这两种方法来将本机 utf 8 字符串 char 转换为托管字符串 反之亦然 下面的代码完成了这个工作 public IntPtr NativeUtf8FromString string managedString byte buf
  • 找不到版本 GLIBCXX_3.4.11(buildW.mexglx 需要)

    我正在尝试通过 matlab 编译 C ubuntu 项目here 当我在使用 make 命令编译后尝试使用它时 出现以下错误 Invalid MEX file fashionista v0 2 lib bsr buildW mexglx
  • 从输入迭代器创建 C++ std::string 的性能

    我正在做一些非常简单的事情 将整个文本文件从磁盘放入std string 我当前的代码基本上是这样做的 std ifstream f filename return std string std istreambuf iterator
  • 未找到 Android SSL 连接的信任锚

    我正在尝试连接到运行 godaddy 256 位 SSL 证书的 IIS6 机器 但收到错误 java security cert CertPathValidatorException Trust anchor for certificat
  • 使用 PHP 创建 ping 正常运行时间服务

    我有一台可以使用 PHP 的服务器和一个可以从 Internet ping 通的路由器 我想编写一个 PHP 脚本 每 5 分钟向路由器发送一次 ping 结果如下 如果 ping 成功 则不会发生任何事情 如果 ping 失败 则会等待几
  • 当另一个视图控制器显示在 UIPresentationController 之上时,UIPresentationController 会更改大小

    我正在使用 UIPresentationController 展示一个模式视图控制器 我使用以下方法将presentedView 的框架设置为小于containView 的边界 override func frameOfPresentedV
  • mutex.Lock() 如何知道要锁定哪些变量?

    我是个新手 所以请温柔一点 所以我已经在我的一些代码中使用互斥体几周了 我理解其背后的概念 锁定对特定资源的访问 与其交互 读或写 然后再次为其他资源解锁 我使用的互斥体代码主要是复制粘贴调整 代码运行了 但我仍在尝试了解它的内部工作原理
  • 按日期对文件排序

    我在网上找到了这个目录检查代码并稍微修改了一下 这样它就会打印出添加的文件 有一个浮标时不时地向我发送读数 但有时连接会丢失 而不是一个文件 而是发送多个文件 我需要该程序按创建日期对它们进行排序 有没有办法做到这一点 import os
  • 为什么 Java 和 C# 有位移运算符?

    整数乘法 暂时忘记除法 之间的差异是否仍然有利于移位 如果是的话 差异有多大 它看起来只是一个低级优化 即使您想要它 在大多数情况下 C Java 字节码编译器或 jit 不应该捕获它吗 注意 我测试了 C 的编译输出 使用 gmcs Mo
  • 设置 UITextField 的最大字符长度

    如何设置一个文件的最大字符数UITextField当我加载一个iPhone SDK时UIView 虽然UITextField类没有最大长度属性 通过设置文本字段的值来获得此功能相对简单delegate并实现以下委托方法 Objective