如何在用户input新行时将自动缩进添加到UITextView?

如何在用户input新行时将自动缩进添加到UITextView ? 例:

 line1 line2 <user has typed "Enter"> <cursor position> line3 <user has typed "Enter"> <cursor position> 

虽然在这种情况下OP似乎并不是在寻找标准缩进,但是我将把它留给未来的求职者。

以下是如何在每次换行符后自动添加缩进的方法。 我已经适应了这个答案,从我最近的类似回答中自动添加每个换行符的项目符号 。

 - (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, ie 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; } 

对于第一行,你将不得不写这个代码:

 - (void)textViewDidBeginEditing(UITextView *)textView { if ([textView.text isEqualToString:@""]) { [textView setText:@"\t"]; } } 
Interesting Posts