Как добавить автоматический отступ в UITextView, когда пользователь вводит новую строку?
Как добавить автоматический отступ в UITextView
, когда пользователь вводит новую строку? Пример:
line1
line2 <user has typed "Enter">
<cursor position>
line3 <user has typed "Enter">
<cursor position>
2 ответа:
хотя кажется, что ОП на самом деле не ищет стандартного отступа в этом случае, я оставляю это для будущих искателей ответов.
Вот как вы можете автоматически добавлять отступ после каждой записи новой строки. Я адаптировал этот ответ из моего аналогичного недавнего ответа об автоматическом добавлении маркерных точек в каждой новой строке.
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { // If the replacement text is "\n" thus indicating a newline... if ([text isEqualToString:@"\n"]) { // If the replacement text is being added to the end of the // text view's text, i.e. the new index is the length of the // old text view's text... if (range.location == textView.text.length) { // Simply add the newline and tab to the end NSString *updatedText = [textView.text stringByAppendingString:@"\n\t"]; [textView setText:updatedText]; } // Else if the replacement text is being added in the middle of // the text view's text... else { // Get the replacement range of the UITextView UITextPosition *beginning = textView.beginningOfDocument; UITextPosition *start = [textView positionFromPosition:beginning offset:range.location]; UITextPosition *end = [textView positionFromPosition:start offset:range.length]; UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end]; // Insert that newline character *and* a tab // at the point at which the user inputted just the // newline character [textView replaceRange:textRange withText:@"\n\t"]; // Update the cursor position accordingly NSRange cursor = NSMakeRange(range.location + @"\n\t".length, 0); textView.selectedRange = cursor; } // Then return "NO, don't change the characters in range" since // you've just done the work already return NO; } // Else return yes return YES; }