0

I am using the following code to add a character to a mutable string then put it into a textview from a custom keyboard

- (IBAction) press:(id)sender {
    [[UIDevice currentDevice] playInputClick];
    if (sender == AEE) {
        self.BACK.hidden = NO;
        A = @"A";
        NSLog(@"sender:%@",sender);
    }
    if (sender == BEE) {
        self.BACK.hidden = NO;
        A = @"B";
    }

    if (sender == CEE) {
        self.BACK.hidden = NO;
        A = @"C";
    }

    if (sender == DEE) {
        self.BACK.hidden = NO;
        A = @"D";
    }

    if (sender == EEE) {
        self.BACK.hidden = NO;
        A = @"E";
    }

    if (sender == EFF) {
        self.BACK.hidden = NO;
        A = @"F";
    }

    if (sender == ONE) {
        self.BACK.hidden = NO;
        A = @"1";
    }

    if (sender == TWO) {
        self.BACK.hidden = NO;
        A = @"2";
    }

    if (sender == THREE) {
        self.BACK.hidden = NO;
        A = @"3";
    }

    if (sender == FOUR) {
        self.BACK.hidden = NO;
        A = @"4";
    }

    if (sender == FIVE) {
        self.BACK.hidden = NO;
        A = @"5";
    }

    if (sender == SIX) {
        self.BACK.hidden = NO;
        A = @"6";
    }

    if (sender == SEVEN) {
        self.BACK.hidden = NO;
        A = @"7";
    }

    if (sender == EIGHT) {
        self.BACK.hidden = NO;
        A = @"8";
    }

    if (sender == NINE) {
        self.BACK.hidden = NO;
        A = @"9";
    }

    if (sender == ZERO) {
        self.BACK.hidden = NO;
        A = @"0";
    }




    if (display.length <= 7) {
        [self.display appendString:A];
         DONE.hidden = YES;
    }
    if (display.length == 8) {
        DONE.hidden = NO;
    }


    else {
        [self.display appendString:@""];
    }


    //**THIS IS WHERE I DELETE CHARATERS**
    if (sender == BACK) {


                [display deleteCharactersInRange:NSMakeRange([display length]-2, 2)];
                       NSLog(@"display2:%@", display);
        if (self.display.length <1) {
            BACK.hidden = YES;
        }
        if (display.length < 8) {
            DONE.hidden = YES;
        }
    }


    you.text = display;
}

When I use the code to delete characters it works fine with for all the characters 1 - 7. Wherever I am if I hit the backspace button it deletes one character. However when I hit the backspace button to delete a character from having 8 characters it deletes two characters. If I change the code to only delete one character like

[display deleteCharactersInRange:NSMakeRange([display length]-1, 1)];

it only deletes one character once. And if I put

[display deleteCharactersInRange:NSMakeRange([display length]-1, 2)];

it does the same thing. But when I put

[display deleteCharactersInRange:NSMakeRange([display length]-2, 1)];

my app crashes and I get an out of bounds error. I have tried using if display =<7 use one the -2,2 code and if display ==8 use the -1,1 code but nothing make it reduce the number of character by one all the time. Does anyone have any suggestions?

user1114881
  • 731
  • 1
  • 12
  • 25

1 Answers1

0

I figured out that if I created a separate action to delete and used the following code everything seemed to work ok

  • (IBAction) Delete:(id)sender{ [[UIDevice currentDevice] playInputClick]; if (sender == BACK) { if ([display length] > 0) { [display setString:[display substringToIndex:[display length]-1]]; you.text = display;

    }
    else {
        you.text = display;
        //no characters to delete... attempting to do so will result in a crash
    }
    if (self.display.length <1) {
        BACK.hidden = YES;
    }
    if (display.length < 8) {
        DONE.hidden = YES;
    }
    

    }

user1114881
  • 731
  • 1
  • 12
  • 25