我有一个UITextField
我的用户用来键入标签。我需要能够在非常特定的时间 - 阻止我的用户继续输入默认情况下使用UITextFields显示的键盘。但是,我仍然需要允许我的用户点击iOS键盘上的退格按钮,以便他们可以尝试输入适合的单词。
要牢记几件非常重要的事情:
UITextField
不应该被冻结,因为我决定何时根据我添加到标签屏幕的UIViews冻结textField 我已尝试设置textField.enabled = NO
,但我再次需要仍然可以使用textField,我只需要冻结输入并强制用户退格,不允许使用andy字符已添加到textField
。
答案 0 :(得分:3)
您可以尝试下面的内容
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range
replacementString: (NSString*) string {
NSString *text = [textField.text stringByReplacingCharactersInRange:range withString: string];
if([text length] > MAX_LENGTH)
return NO;
else
return YES;
}
EDIT1: 要调用此委托方法,请设置textfield的委托。 在这种情况下,您可以将其用作
yourTextField.delegate = self;
在你的viewWillAppear / viewDidAppear。
中答案 1 :(得分:1)
试试这个
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
// Prevent crashing undo bug – see note below.
if(range.length + range.location > textField.text.length)
{
return NO;
}
NSUInteger newLength = [textField.text length] + [string length] - range.length;
if(textField == self.yourTextField)
{
return newLength <= CHARACTER_LIMIT;
}
else
{
return YES;
}
}
答案 2 :(得分:0)
尝试此操作,即使文本字段预填充超过MAX_Length文本,后退空间仍然有用
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range
replacementString: (NSString*) string {
NSString *text = [textField.text stringByReplacingCharactersInRange:range withString: string];
NSString *text = [textField.text stringByReplacingCharactersInRange:range withString: string];
if([text length] > MAX_LENGTH && string.length>0)
return NO;
else
return YES;
}