UITextView和UITextField類似
UITextViewDelegate方法
#import "ViewController.h"@interface ViewController ()@end@implementation ViewController{? ? UITextField *textField1;}- (void)viewDidLoad {? ? [super viewDidLoad];? ? textField1 = [[UITextField alloc] init];? ? textField1.delegate = self;? ? //添加方法? ? [textField1 addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];? ? textField1.frame = CGRectMake(10, 80, 200, 60);? ? textField1.backgroundColor = [UIColor grayColor];? ? [self.view addSubview:textField1];}- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event{
[textField1 resignFirstResponder];
//? ? [self.view endEditing:YES];
}
static BOOL isWarned = YES;
- (void)textFieldDidChange:(UITextField *)tf
{
// 該判斷用于聯(lián)想輸入? ? 6個字符? 3個漢字
[self limitCharater:tf limit:6];
}
//限制聯(lián)想輸入的字?jǐn)?shù)
- (void)limitCharater:(UITextField *)tf limit:(int )count{
if ([self characterCount:tf] > count) {
while ([self characterCountWithString:tf.text] > count && tf.markedTextRange== nil) {
tf.text = [tf.text substringToIndex:tf.text.length - 1];
}
if (isWarned && tf.markedTextRange == nil) {
isWarned = NO;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
isWarned = YES;
});
}
}
}
/**
*? 計(jì)算字符個數(shù)(一個漢字等于兩個字符)
*/
- (NSInteger)characterCountWithString:(NSString *)string
{
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSData* data = [string dataUsingEncoding:enc];
return data.length;
}
/**
*? 計(jì)算字符個數(shù)(一個漢字等于兩個字符)
*/
- (NSInteger)characterCount:(UITextField *)tf
{
NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSData* data = [tf.text dataUsingEncoding:enc];
return data.length;
}
@end