如何强制用户停止在UITextField中键入但允许退格

时间:2015-12-29 06:22:14

标签: ios objective-c iphone uitextfield

我有一个UITextField我的用户用来键入标签。我需要能够在非常特定的时间 - 阻止我的用户继续输入默认情况下使用UITextFields显示的键盘。但是,我仍然需要允许我的用户点击iOS键盘上的退格按钮,以便他们可以尝试输入适合的单词。

要牢记几件非常重要的事情:

  1. 由于字符数量最多,UITextField不应该被冻结,因为我决定何时根据我添加到标签屏幕的UIViews冻结textField
  2. 用户仍然可以退格
  3. 键盘不应被解雇
  4. 不应禁用textField
  5. 我已尝试设置textField.enabled = NO,但我再次需要仍然可以使用textField,我只需要冻结输入并强制用户退格,不允许使用andy字符已添加到textField

3 个答案:

答案 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;
}