我想不得不偶爾向UITextView文本對象中插入文本。例如,如果用戶按下「新段落」按鈕,我想插入一個雙換行符而不是標準單個換行符。UITextView在textview文本中插入文本
我該怎麼辦?我是否必須從UITextView中讀取字符串,進行變異並寫回來?那我怎麼知道指針在哪裏?
感謝
我想不得不偶爾向UITextView文本對象中插入文本。例如,如果用戶按下「新段落」按鈕,我想插入一個雙換行符而不是標準單個換行符。UITextView在textview文本中插入文本
我該怎麼辦?我是否必須從UITextView中讀取字符串,進行變異並寫回來?那我怎麼知道指針在哪裏?
感謝
由於UITextView
的text
屬性是不可改變的,你必須創建一個新的字符串和文本屬性設置爲它。的NSString有通過附加參數傳遞到接收器創建一個新的字符串的實例方法(-stringByAppendingString:
):
textView.text = [textView.text stringByAppendingString:@"\n\n"];
需要處理的事實,這可能不是在字符串的末尾。一些insertStringAtPoint類的函數?什麼? – 2010-05-08 01:52:41
找到了!它實際上是insertString:atIndex: – 2010-05-08 01:55:55
您可能希望在更新textView.text之前設置textView.scrollEnabled = NO;這可以防止惱人的滾動到文本視圖的末尾 – 2010-09-15 03:09:01
這裏是我是如何實現它,它似乎很好地工作。
- (void) insertString: (NSString *) insertingString intoTextView: (UITextView *) textView
{
NSRange range = textView.selectedRange;
NSString * firstHalfString = [textView.text substringToIndex:range.location];
NSString * secondHalfString = [textView.text substringFromIndex: range.location];
textView.scrollEnabled = NO; // turn off scrolling or you'll get dizzy ... I promise
textView.text = [NSString stringWithFormat: @"%@%@%@",
firstHalfString,
insertingString,
secondHalfString];
range.location += [insertingString length];
textView.selectedRange = range;
textView.scrollEnabled = YES; // turn scrolling back on.
}
嗨布萊恩,我在這裏有同樣的問題,我嘗試你的答案,我可以插入文本,但textview插入文本後總是跳到最後一行,你能給我另一種幫助嗎? – 2012-05-28 01:52:01
@ R.Dewi,在更改之前設置'textView.scrollEnabled = NO',然後將其更改回來。 – Dustin 2012-08-02 16:47:55
UITextview有一個insertText方法,它遵守光標位置。
- (void)insertText:(NSString *)text
例如:
[myTextView insertText:@"\n\n"];
這不是被接受的答案嗎?這是正確的做法,而不是訴諸黑客。 – 2015-12-18 17:07:40
@sudo我不知道我上次做了什麼錯誤,但現在它工作了!非常感謝!這節省了我的一天(尤其是因爲它尊重光標位置!!!!!!!!!!) – ParkerHalo 2016-03-30 14:15:46
@NYCTechEngineer可能是因爲文檔很差,繼承進一步模糊了事情,除非在某處明確提到,否則很難找到。我終於找到了'insertText'文檔(https://developer.apple.com/documentation/uikit/uikeyinput),但沒有鏈接,並且沒有提及它。 – 2018-01-04 14:51:56
- (void)insertStringAtCaret:(NSString*)string {
UITextView *textView = self.contentCell.textView;
NSRange selectedRange = textView.selectedRange;
UITextRange *textRange = [textView textRangeFromPosition:textView.selectedTextRange.start toPosition:textView.selectedTextRange.start];
[textView replaceRange:textRange withText:string];
[textView setSelectedRange:NSMakeRange(selectedRange.location + 1, 0)];
self.changesDetected = YES; // i analyze the undo manager in here to enabled/disable my undo/redo buttons
}
這是一個正確的答案!
光標位置也是正確的。
滾動位置也是正確的。
- (void) insertString: (NSString *) insertingString intoTextView: (UITextView *) textView
{
[textView replaceRange:textView.selectedTextRange withText:insertingString];
}
對於雨燕3.0
您可以將文本通過調用UITextView
實例的方法insertText
。
實施例:
textView.insertText("yourText")
這是一個很好,很乾淨的選項。謝謝。 – 2017-06-18 13:59:35
[與NSUndoManager支持的UITextView替換文本]的可能重複(http://stackoverflow.com/questions/6419823/replacing-text-in-uitextview-with-nsundomanager-support ) – 2012-04-26 21:43:26