要限制一个UITextField/UITextView的输入字数,首先想到的应该是通过UITextFieldDelegate/UITextViewDelegate
的代理方法来限制,那么如何来更好的限制输入字数呢,下面我们来看看:

TextView。幸运的是,当我们点进去UITextView.h头文件里时,会发现- (void)textViewDidChange:(UITextView *)textView;这个代理方法,我们只需要在这个方法里实现字数限制就好

- (void)textViewDidChange:(UITextField *)textView
{
if (textView == self.textView) {
if (textView.text.length > 20) {
textView.text = [textView.text substringToIndex:20];
}
}
}

TextField。Textfield就没有那么幸运了,当我们点进去UITextField.h头文件的时候,怎么也找不到- (void)textFieldDidChange:(UITextField *)textField方法,就在我们寻觅上述回调方法而不得时,可能会发现最下面有这么个消息通知名称:

UIKIT_EXTERN NSString *const UITextFieldTextDidChangeNotification;

不过,监听消息还要记得解除监听,通常我还习惯把监听消息的代码统一放在一个方法中,看起来有点“大动干戈”。
所幸的是UITextField本身提供了相应的事件监听:

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

这样就可以更好地限制输入长度:

- (void)textFieldDidChange:(UITextField *)textField
{
if (textField == self.titleField) {
if (textField.text.length > 20) {
textField.text = [textField.text substringToIndex:20];
}
}
}

uitextview 在中文后输入英文到行尾的时候,中文后的英文全部换到下一行

uitextview在中文后输入英文到行尾的时候,中文后的英文全部换到下一行,如下图所示:

会出现自动换行的问题,当然我们正常输入的时候是不希望看到这种情况的,所以,要去掉这种情况,我们只需在textView的代理方法- (void)textViewDidChange:(UITextView *)textView;中实现如下代码即可

- (void)textViewDidChange:(UITextView *)textView {
//防止输入时在中文后输入英文过长直接中文和英文换行
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping;
NSDictionary *attributes = @{
NSFontAttributeName:[UIFont systemFontOfSize:14],
NSParagraphStyleAttributeName:paragraphStyle
};
textView.attributedText = [[NSAttributedString alloc] initWithString:textView.text attributes:attributes];
}

这样处理后就会看到效果如下图所示:

 

限制UITextField/UITextView的输入字数与中文输入之后的英文换行问题的更多相关文章

  1. UITextView 输入字数限制

    本文介绍了UITextView对中英文还有iOS自带表情输入的字数限制,由于中文输入会有联想导致字数限制不准确所以苦恼好久,所以参考一些大神的博客终于搞定,欢迎大家参考和指正. 对于限制UITextV ...

  2. 限制UITextField的输入字数(长度)最正确的方法

    在开发中, 有些时候会碰到这样的需求: 希望输入框有最大字数限制. 比如, 用户昵称长度限制, 评论最大字数限制.所以通过相关测试和浏览文章,使用下面的方法可以基本解决问题. 在viewDidLoad ...

  3. UITextField,UITextView字数限制

    UITextField,UITextView字数限制 主要是使用他们的两个代理方法 //标题限制在 30个字以内 - (BOOL)textField:(UITextField *)textField ...

  4. 实现textarea限制输入字数(包含中文只能输入10个,全ASCII码能够输入20个)

    document.getElementById("<%=textBox1.ClientID %>").value 实现textarea限制输入字数(包含中文只能输入10 ...

  5. 【移动开发】EditText输入字数限制总结(包括中文输入内存溢出的解决方法)

    限定EditText输入个数的解决方案很多,但是一般主要考虑两点,也就是处理两件事:(1)不同语言字符(英文.中文等)处理方式(2)输入字符达到数目后,是否仍然允许用户输入 第一点,涉及的东东其实蛮多 ...

  6. Android EditText输入字数限制总结(包含中文输入内存溢出的解决方法)

    转载请注明,大飞:http://blog.csdn.net/rflyee/article/details/38856539 限定EditText输入个数的解决方式非常多,可是一般主要考虑两点.也就是处 ...

  7. iOS - UITextView在调用textViewDidChange方法,九宫格相关中文输入的问题

    问题一 iOS textView在调用 UITextViewDelegate 的 textViewDidChange方法,九宫格相关中文输入的问题 有时候,需要在textViewDidChange处理 ...

  8. iOS 限制输入字数

    关于限制输入字数以前也做过,网上也很多方法.但都不够完美,本方法可防止中文联想.粘贴等突破长途限制.可防止Emoji截为两半导致编码出问题. - (void)textFieldDidChange:(U ...

  9. iOS 限制输入字数完美解决方案

    关于限制输入字数以前也做过,网上也很多方法.但都不够完美,本方法可防止中文联想.粘贴等突破长途限制.可防止Emoji截为两半导致编码出问题.   - (void)textFieldDidChange: ...

随机推荐

  1. Python中classmethod与staticmethod区别

    classmethod:类方法staticmethod:静态方法 在python中,静态方法和类方法都是可以通过类对象和类对象实例访问.但是区别是: @classmethod 是一个函数修饰符,它表示 ...

  2. 【响应式Web设计实践 #BOOK#】

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  3. Delphi使用NativeXml访问XML文件

    Delphi使用NativeXml访问XML文件 1.创建XML文件var Doc: TNativeXml;//声明上下文对象var filepath:string;//文件路径DOC:=TNativ ...

  4. Unity Chan Advanced

    1. 8X MSAA 2. SMAA 3. ViewSpace Outline 4. Unity Chan Skin 5. Shift Toon Lighting 6. DOF 7. Bloom

  5. vijosP1059 积木城堡

    vijosP1059 积木城堡 链接:https://vijos.org/p/1059 [思路] 01背包. 刚开始想麻烦了,想的是二分答案然后01背包判断是否可行,但是首先答案不满足单调性所以不能二 ...

  6. 2013=7=29 nyist 13题

    Fibonacci数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地 ...

  7. Java 中UDP原理机制及实现方式介绍(建议阅读者阅读前了解下Java的基础知识,一方便理解)

    1.基本概念介绍: 首先得简单介绍下UDP. UDP( User Datagram Protocol )协议是用户数据报,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层——传输层, ...

  8. LOL游戏程序中对一些函数的Hook记录(Win10 x64)

    [PC Hunter Standard][League of Legends.exe-->Ring3 Hook]: 108Hooked Object Hook Address and Locat ...

  9. iOS开发之获取WIFI信号强度

    虽然各种直接获取信号强度的api都被封杀了.但是还有一个另类的黑魔法可以获取到.那就是遍历UIStatusBar了 - (void)getSignalStrength{ UIApplication * ...

  10. HDU 3078 Network LCA

    题意:n个点 m个询问,下面一行是n 个点的权值 再下面n-1行是双向的边 然后m个询问:k u v 若k==0,则把u点的权值改为v,否则回答u->v之间最短路经过点的权值中  第k大的值是多 ...