好吧标题主要是:
是否有准备好的UITextField
组件可以在标签中取一个数字(最大文本长度)?如果也可以显示数字也会很酷。
那里有组件吗?
我想拥有什么:
答案 0 :(得分:5)
请参阅我的其他答案以获得一个好的子组件。
我在TextField中添加了一个UILabel子视图来显示字符限制。
它将:
*按自定义文本长度限制输入
*在UITextField内的UILabel子视图中显示字符限制
*粘贴预防
结果: 要么
@implementation ViewController
@synthesize textField1;
UILabel *yourLabel;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
yourLabel = [[UILabel alloc] initWithFrame:CGRectMake(textField1.bounds.size.width-18, 12, 300, 20)];//Change your size, you will need to experiment with the size
[yourLabel setTextColor:[UIColor redColor]];
[yourLabel setBackgroundColor:[UIColor clearColor]];
[yourLabel setFont:[UIFont fontWithName: @"Trebuchet MS" size: 14.0f]];
[yourLabel setText:@""];
[textField1 addSubview:yourLabel];
textField1.delegate=self;
[self textField:textField1 shouldChangeCharactersInRange:NSMakeRange(0, 0) replacementString:@""];//To change the limit label
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
int MAXLENGTH=20;
NSString *newText = [textField.text stringByReplacingCharactersInRange:range withString:string];
if(newText.length>MAXLENGTH) {
return NO;
}
[yourLabel setText:[NSString stringWithFormat:@"%lu",MAXLENGTH-newText.length]];
return YES;
}
我希望这符合您的需求,让您开始。
不要忘记订阅UITextFieldDelegate
。在.h文件中,声明:
@interface ViewController : UIViewController<UITextFieldDelegate>// -- < UITextFieldDelegate
答案 1 :(得分:5)
我创建了this UITextFieldLimit子类:
从此GitHub存储库中抓取UITextFieldLimit.h
和UITextFieldLimit.m
:
https://github.com/JonathanGurebo/UITextFieldLimit
开始测试!
标记您的故事板创建的UITextField并使用Identity Inspector将其链接到我的子类:
然后您可以将其链接到IBOutlet并设置限制(默认值为10)。
您的ViewController.h文件应包含:(如果您不想修改设置,例如限制)
#import "UITextFieldLimit.h"
/.../
@property (weak, nonatomic) IBOutlet UITextFieldLimit *textFieldLimit; // <--Your IBOutlet
您的ViewController.m文件应为@synthesize textFieldLimit
。
在ViewController.m文件中设置文本长度限制:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[textFieldLimit setLimit:25];// <-- and you won't be able to put more than 25 characters in the TextField.
}
希望全班同学帮助你。祝你好运!
答案 2 :(得分:1)
要求1和3直接使用委托方法:
// maxLength is a publicly assignable property
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
// this covers paste, also
NSString *candidateString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (candidateString.length > self.maxLength) return NO;
[self updateCaptionSizeForText:candidateString];
// requirement 2
[self updateCharsRemainingLabel:candidateString.length];
return YES;
}
要求2可以通过添加标签并更新其值来实现:
- (void)updateCharsRemainingLabel:(NSInteger)currentLength {
NSInteger remaining = self.maxLength - currentLength;
self.charsRemainingLabel.text = [NSString stringWithFormat:@"%d", remaining];
}