Попытка удалить символ в строке в UITextField с помощью возврата

У меня есть UITextField в моем приложении, где я разрешаю пользователю вводить и удалять текст. Я реализую метод UITextFieldDelegate:

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

Внутри этого метода я делаю несколько вещей (не связанных с этим вопросом), а затем вызываю другой метод:

-(NSString*) formatString:(NSString*) stringName stringRange:(NSRange)range deleteLastChar:(BOOL)deleteLastChar {

    ...

    NSString *newString = [stringName mutableCopy];
    if(deleteLastChar) {
        //this line below is only deleting spaces within the text, but not deleting any characters.  I am unable to position the cursor in front of any character within the line itself, but only at the end of the line.  I am only able to delete characters from the end of the end of the line, but not from within the line.
        [newString delecteCharactersInRange:NSMakeRange(range.location, 1)];
    }

    return newString;

}

В этом методе я пытаюсь удалить символ, рядом с которым находится курсор, с помощью клавиши Backspace на клавиатуре (стандартная функциональность). «stringName» в данном случае — это вся строка, введенная в текстовое поле. Вместо этого я всегда удаляю последний символ всей строки. Я понимаю, что мне нужно использовать объект NSRange, но я не знаю, как в этом случае. Любые идеи?


person syedfa    schedule 07.08.2014    source источник


Ответы (1)


Вот один из способов сделать это, используя UITextField, а не просто строку

-(void)RemoveCharacter{
    // Reference UITextField
    UITextField *myField = _inputField;

    UITextRange *myRange = myField.selectedTextRange;
    UITextPosition *myPosition = myRange.start;
    NSInteger idx = [myField offsetFromPosition:myField.beginningOfDocument toPosition:myPosition];

    NSMutableString *newString = [myField.text mutableCopy];

    // Delete character before index location
    [newString deleteCharactersInRange:NSMakeRange(--idx, 1)];

    // Write the string back to the UITextField
    myField.text = newString;
}
person Automate This    schedule 07.08.2014
comment
Большое спасибо за ваше решение. Это почти работает, но моя единственная проблема заключается в том, что курсор всегда возвращается в конец строки, а не в то место, где был удаленный символ. Какие-либо предложения? - person syedfa; 08.08.2014
comment
Хороший вопрос, я думаю, что в этом сообщении есть то, что вам нужно. Если нет, дайте мне знать, и я покопаюсь в этом дальше. - person Automate This; 08.08.2014
comment
Я обновил свой код выше, чтобы показать вам, что у меня есть. По крайней мере, я могу удалить пробелы внутри строки, но не любые символы. Я могу удалять символы только с конца строки. Еще раз спасибо за вашу помощь. - person syedfa; 09.08.2014