如何从iOS中的UITextField中删除双重或意外字符

时间:2015-01-04 10:59:31

标签: ios objective-c

我正在研究UITextField及其委托。如果我使用两个文本字段,我可以轻松地重新签名第一个文本字段,也可以转到第二个文本字段。但是当我清空第二个文本字段时,意味着当字符范围为零时,我可以转到第一个文本字段。但是当我按下返回键然后重新签名第一个文本字段并转到第二个文本字段。但是当我想在这里写一个额外的一个字符添加时,会出现问题。下面是我的代码

   -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (textField.tag == 0) {
    firstTextLabel.text = newString;
}else if(textField.tag == 1){
    if([textField.text.length] == 0){
       [secondTextField resignFirstResponder]; 
       [firstTextField becomeFirstResponder];
    }
    secondTextLabel.text = newString;
}
return YES;

}

     - (BOOL)textFieldShouldReturn:(UITextField *)textField{

if (textField.tag == 0) {
    [firstTextField resignFirstResponder];
    [secondTextField becomeFirstResponder];
}else if(textField.tag == 1){
    [secondTextField resignFirstResponder];
    [thirdTextField becomeFirstResponder];
}
return YES;

}

2 个答案:

答案 0 :(得分:2)

请阅读NSResponder.becomeFirstResponder:

的文件
  

使用NSWindow makeFirstResponder:方法而不是此方法将对象作为第一个响应者。永远不要直接调用此方法。

答案 1 :(得分:0)

错误是因为您在代码末尾设置了firstTextLabel.text = newString;,然后设置了return YES

你必须选择

  • 删除return YES;
  • 末尾的textField shouldChangeCharactersInRange:
  • 请遵循此完整指南(我推荐此选项)

    • 首先

    当您设置becomeFirstResponder时,resignFirstResponder没有必要。

    所以删除所有resignFirstResponder

    • <强>第二 如果您有多个文本字段,例如100个文本字段,所有文本字段都标记为1到100, 这是我处理谁成为第一响应者的代码。

       - (BOOL)textFieldShouldReturn:(UITextField *)textField
       {
      
             NSInteger tag = textField.tag;
             UITextField *nextTextfield = (UITextField *)[self.view viewWithTag:tag+1];
             [nextTextfield becomeFirstResponder];
      
           return NO;
      
       }
      
    • <强>第三
      变化:

       if (textField.tag == 0) {
           firstTextLabel.text = newString; }
      

      要:

       if (textField.tag == 0) {
           return YES; }
      
    • <强>四

      变化:

       -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
      
       NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
       if (textField.tag == 0) {
           firstTextLabel.text = newString;
       }else if(textField.tag == 1){
           if([textField.text.length] == 0){
              [secondTextField resignFirstResponder]; 
              [firstTextField becomeFirstResponder];
           }
           secondTextLabel.text = newString;
       }
       return YES;
      

      要:

       -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
      
       NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
      
        if(textField.tag == 1){
           if([textField.text.length] == 0){
              [firstTextField becomeFirstResponder];
           }
           return YES;
        }
       return YES;
      

如果您有任何问题,请随时提出。