因为 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://blog.dongge.org/101.html
本文采用知识共享署名4.0 国际许可协议进行许可。转载或大段使用必须添加本文链接,否则您将构成侵权!
微信公众号: 东哥org

