因为 oc 中textfield和UITextView是没有直接限制字数的函数,所以需要在代理的方法中实现
1. 在@interface中声明代理
@interface MyViewController : UIViewController <UITextFieldDelegate>
2. 设置UITextField的delegate,可以在viewDidLoad方法中实现,也可以在nib文件(或是storyboard)中实现。这个一定要实现,否则是响应不了代理的方法的
textField.delegate = self;
3. 实现代理方法。
方法代码如下
//限制输入字数 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if ([string isEqualToString:@"\n"]) { return YES; } NSString * aString = [textField.text stringByReplacingCharactersInRange:range withString:string]; if (self.myusername == textField)//这个 if 判断是在多个输入框的时候,只限制一个输入框的时候用的,如果全部限制,则不加 if 判断即可,这里是只判断输入用户名的输入框 { if ([aString length] > 5) { textField.text = [aString substringToIndex:5]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"超过最大字数不能输入了" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; [alert show]; return NO; } } return YES; }
对于UITextView 可以在这个函数中处理,代码是类似的,只是改几个字母
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
第二种方法:
就是 textview 可以使用
- (void)textViewDidChange:(UITextView *)textView 计算剩余字数,然后再在上面的那个
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;判断是是否可以输入。
这个比较麻烦,方法是这样的
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if( remainTextNum_<=0) { return NO; } else { return YES; } } //在这个地方计算输入的字数 - (void)textViewDidChange:(UITextView *)textView { NSString * nsTextContent=textView.text; int existTextNum=[nsTextContent length]; remainTextNum_=100-existTextNum; //remainTextNum_ 是全局的变量,记录剩余可输入个数 }
感觉这样还不如直接在 shouldchangetextrange 里面直接写,这里只是给个思路
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/101.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!