问题
How can I add auto indentation to UITextView
when user type new line? Example:
line1
line2 <user has typed "Enter">
<cursor position>
line3 <user has typed "Enter">
<cursor position>
回答1:
Although it seems as if the OP isn't in fact looking for standard indentation in this case, I'm leaving this up for future answer seekers.
Here's how you can automatically add an indent after every newline entry. I've adapted this answer from my similar recent answer about automatically adding bullet points at every newline.
- (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;
}
回答2:
For the first line, you would have to write this code:
- (void)textViewDidBeginEditing(UITextView *)textView
{
if ([textView.text isEqualToString:@""])
{
[textView setText:@"\t"];
}
}
来源:https://stackoverflow.com/questions/27334713/how-can-i-add-auto-indentation-to-uitextview-when-user-type-new-line