我有一个UITextField
,我希望它的最大文本长度为20.所以我让self(当前视图控制器)同意<UITextFieldDelegate>
并将self设置为文本字段的委托,并且使用以下方法设置最大长度:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField == self.nickNameTextField)
{
if (textField.text.length > 20)
return NO;
}
return YES;
}
然而,当我在这个函数中插入一个断点时,我发现当我输入任何单词时没有调用这个函数,更不用说当文本的长度超过20时。有人可以告诉我为什么吗?
答案 0 :(得分:0)
您可能无法将文本字段与代理相关联 右键单击要委派的textField,然后在viewcontroller上拖动textField,然后选择该委托。
答案 1 :(得分:0)
我向您展示了使用XIB或Storyboard连接textField和delegate的步骤和屏幕截图。
在故事板中
第2步:将TextField拖到ViewController
步骤3:单击TextField上的“control + mouse”到ViewController.h并显示行
步骤5:右键单击ViewController中的TextField
如果要以编程方式创建textField
UITextField *txtfldMaxLength = [[UITextField alloc] initWithFrame:CGRectMake(30, 100, 250, 50)];
txtfldMaxLength.borderStyle = UITextBorderStyleRoundedRect;
txtfldMaxLength.textColor = [UIColor blackColor];
txtfldMaxLength.backgroundColor = [UIColor clearColor];
txtfldMaxLength.font = [UIFont systemFontOfSize:17];
txtfldMaxLength.placeholder = @"enter something";
txtfldMaxLength.autocorrectionType = UITextAutocorrectionTypeNo;
txtfldMaxLength.keyboardType = UIKeyboardTypeDefault;
txtfldMaxLength.returnKeyType = UIReturnKeyDone;
txtfldMaxLength.clearButtonMode = UITextFieldViewModeWhileEditing;
txtfldMaxLength.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
txtfldMaxLength.delegate = self;
[self.view addSubview:txtfldMaxLength];
答案 2 :(得分:0)
我已经弄明白了这个问题。我使用这个语法来实例化一个UITextField:
self.nickNameTextField.delegate = self;
self.nickNameTextField = ({
UITextField *textField = [UITextField new];
textField.placeholder = [BBTCurrentUserManager sharedCurrentUserManager].currentUser.nickName;
textField.textAlignment = NSTextAlignmentLeft;
textField.backgroundColor = [UIColor lightGrayColor];
textField;
});
最初我将textField的委托设置在大括号之外(就像上面的代码一样)。但是当我在括号内移动self.nickNameTextField.delegate = self;
时,它就起作用了。但是我不知道为什么会这样,有人可以告诉我为什么?