text field
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textViewEditChanged:) name:UITextFieldTextDidChangeNotification object:nil];
/**
* 当 text field 文本内容改变时 会调用此方法
*
* @param notification
*/
-(void)textViewEditChanged:(NSNotification *)notification{
// 拿到文本改变的 text field
UITextField *textField = (UITextField *)notification.object;
// 需要限制的长度
NSUInteger maxLength = 10;
if (maxLength == 0) return;
// text field 的内容
NSString *contentText = textField.text;
// 获取高亮内容的范围
UITextRange *selectedRange = [textField markedTextRange];
// 这行代码 可以认为是 获取高亮内容的长度
NSInteger markedTextLength = [textField offsetFromPosition:selectedRange.start toPosition:selectedRange.end];
// 没有高亮内容时,对已输入的文字进行操作
if (markedTextLength == 0) {
// 如果 text field 的内容长度大于我们限制的内容长度
if (contentText.length > maxLength) {
// 截取从前面开始maxLength长度的字符串
// textField.text = [contentText substringToIndex:maxLength];
// 此方法用于在字符串的一个range范围内,返回此range范围内完整的字符串的range
// [MBProgressHUD showError:@"只能输入10字" addView:nil];
NSRange rangeRange = [contentText rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, maxLength)];
textField.text = [contentText substringWithRange:rangeRange];
}
}
}
textView
在代理方法中
- (void)textViewDidChange:(UITextView *)textView{
if (textView.text.length==0) {
placeLbl.hidden = NO;
}else{
placeLbl.hidden = YES;
NSUInteger maxLength = 20;
if (maxLength == 0) return;
// textview 的内容
NSString *contentText = textView.text;
// 获取高亮内容的范围
UITextRange *selectedRange = [textView markedTextRange];
// 这行代码 可以认为是 获取高亮内容的长度
NSInteger markedTextLength = [textView offsetFromPosition:selectedRange.start toPosition:selectedRange.end];
// 没有高亮内容时,对已输入的文字进行操作
if (markedTextLength == 0) {
// 如果 textview 的内容长度大于我们限制的内容长度
if (contentText.length > maxLength) {
// 截取从前面开始maxLength长度的字符串
// textField.text = [contentText substringToIndex:maxLength];
// 此方法用于在字符串的一个range范围内,返回此range范围内完整的字符串的range
// [MBProgressHUD showError:@"内容只能输入20字" addView:nil];
NSRange rangeRange = [contentText rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, maxLength)];
_textView.text = [contentText substringWithRange:rangeRange];
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通