2014-08-07 2 views
0

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

- (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» в этом случае - вся строка, введенная в textField. Вместо этого я всегда удаляю последний символ всей строки. Я понимаю, что мне нужно использовать объект NSRange, но я не уверен, как в этом случае. Есть идеи?

Заранее спасибо всем, кто ответил

+0

'NSMakeRange (stringName.length - 1, stringName.length); – brandonscript

ответ

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; 
} 
+0

Большое спасибо за ваше решение. Он почти работает, но моя единственная проблема заключается в том, что курсор всегда возвращается в конец строки вместо места, где был удален удаленный символ. Какие-либо предложения? – syedfa

+0

Хороший вопрос, я думаю, что это [сообщение] (http://stackoverflow.com/a/11532718/2521004) имеет то, что вам нужно. Если нет, дайте мне знать, и я буду копаться дальше. –

+0

Я обновил свой код выше, чтобы показать вам, что у меня есть. Я, по крайней мере, могу удалить пробелы внутри строки, но не любые символы. Я могу только удалить символы из конца строки. Еще раз спасибо за вашу помощь. – syedfa

Смежные вопросы