TextField:shouldChangeCharactersInRange:replacementString: return trap!

穿精又带淫゛_ 提交于 2019-12-11 15:25:00

问题


Im calling UITableViewCell delegate method TextField:shouldChangeCharactersInRange:replacementString: on a custom cell that has four UITextFields and what is happening once maxlength is reached on one of the fields it dose not let you enter any text in the other fields because its always returning "no" for that initial if statement thats being satisfied. any ideas on how to get around this?

I'm only testing on two fields at the moment. Thank you for any help in advance.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    int regFieldOnelength = [regFieldOne.text length] ;
    int regFieldTwolength = [regFieldTwo.text length] ;


    if ((regFieldOnelength >= MAXLENGTH && ![string isEqualToString:@""]) || (regFieldTwolength >= MAXLENGTH && ![string isEqualToString:@""])) {
        if(regFieldOne.text = [regFieldOne.text substringToIndex:MAXLENGTH]){
            return NO;
        }
        if(regFieldTwo.text = [regFieldTwo.text substringToIndex:MAXLENGTH]){
            return NO;
        }
    }


    return YES;
}

回答1:


Why are you using booth the text field, Instead use the current text field that is being edited

    -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    {
        int currentTxtLen = [textField.text length] ;
        if (currentTxtLen >= MAXLENGTH && ![string isEqualToString:@""]) {
            return NO;
        }
        return YES;
}



回答2:


Can you try

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    int regFieldOnelength = [regFieldOne.text length] ;
    int regFieldTwolength = [regFieldTwo.text length] ;

if((textField == regFieldOne) ||(textField == regFieldTwo)) {

    if ((regFieldOnelength >= MAXLENGTH && ![string isEqualToString:@""]) || (regFieldTwolength >= MAXLENGTH && ![string isEqualToString:@""])) {
        if(regFieldOne.text = [regFieldOne.text substringToIndex:MAXLENGTH]){
            return NO;
        }
        if(regFieldTwo.text = [regFieldTwo.text substringToIndex:MAXLENGTH]){
            return NO;
        }
    }


    return YES;
}
    else {
      return YES;
    }
}


来源:https://stackoverflow.com/questions/5959083/textfieldshouldchangecharactersinrangereplacementstring-return-trap

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!