これはなに?
- タイトルどおり
- 検索しても同じようなのを見かけなかったので投稿してみた
- サンプルでは11文字以上になると赤字になるようにした
やり方
1.UITextField作る
ViewController.m
self.textField = [[UITextField alloc] initWithFrame:CGRectMake(14, 0, self.view.frame.size.width - 14, 44)];
self.textField.placeholder = @"何か入力してください。";
self.textField.clearButtonMode = UITextFieldViewModeWhileEditing;
self.textField.textAlignment = NSTextAlignmentLeft;
self.textField.backgroundColor = [UIColor clearColor];
self.textField.delegate = self;
[self.textField addTarget:self
action:@selector(textFieldEditing:)
forControlEvents:UIControlEventEditingChanged];
2.文字数を表示するUILabel
ViewController.m
self.currentLengthLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.view.frame.size.width-50, 2, 30, 10)];
self.currentLengthLabel.font = [UIFont systemFontOfSize:10];
self.currentLengthLabel.hidden = YES;
self.currentLengthLabel.textAlignment = NSTextAlignmentRight;
[self changeCurrentLengthText:0];
[self.textField addSubview:self.currentLengthLabel];
3.文字数の取得
ViewController.m
#pragma mark - 文字数カウント
- (void)changeCurrentLengthText:(NSInteger)currentLength
{
self.currentLengthLabel.text = [NSString stringWithFormat:@"%ld/%ld", (long)currentLength, (long)MAXTITLE];
if (currentLength > MAXTITLE) {
self.currentLengthLabel.textColor = [UIColor redColor];
} else {
self.currentLengthLabel.textColor = [UIColor lightGrayColor];
}
}
4.UITextFieldDelegateで文字数の表示の調整
ViewController.m
#pragma mark - <UITextFieldDelegate>
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
self.currentLengthLabel.hidden = NO;
[self changeCurrentLengthText:textField.text.length];
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
self.currentLengthLabel.hidden = YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[self.textField resignFirstResponder];
return YES;
}
- (BOOL)textFieldShouldClear:(UITextField *)textField
{
[self changeCurrentLengthText:0];
return YES;
}
- (void)textFieldEditing:(UITextField*)textField
{
[self changeCurrentLengthText:textField.text.length];
}