我有一個可編輯的UITextView。現在我有一個要求,要求我查找下一行何時開始(可能是由於我點擊了返回鍵或自動換行符)。是否有任何通知可以得出以確定下一行在打字時何時開始?UITextView(編輯) - 檢測到發生下一行事件
我試圖尋找解決方案來找出在textview中的光標位置,但使用selectedRange和位置屬性來找出它並不能幫助我。位置值與新行之間沒有任何關聯。打字的位置值只是不斷增加。有任何想法嗎?
謝謝!
我有一個可編輯的UITextView。現在我有一個要求,要求我查找下一行何時開始(可能是由於我點擊了返回鍵或自動換行符)。是否有任何通知可以得出以確定下一行在打字時何時開始?UITextView(編輯) - 檢測到發生下一行事件
我試圖尋找解決方案來找出在textview中的光標位置,但使用selectedRange和位置屬性來找出它並不能幫助我。位置值與新行之間沒有任何關聯。打字的位置值只是不斷增加。有任何想法嗎?
謝謝!
將檢測線從東西變成打「迴歸」,退格,以減少線路數,輸入到行和單詞的結尾(*注意:必須調整字體大小的變量,我建議不要使用硬編碼數字,如下面的示例中所示)。
previousNumberOfLines = ((hiddenText.contentSize.height-37+21)/(21));//numbers will change according to font size
NSLog(@"%i", previousNumberOfLines);
無論何時在textView中輸入新文本,都會調用以下代理。
設置委託UITextView的,那麼代碼如下
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
{
if ([text isEqualToString:@"\n"]) {
//Do whatever you want
}
return YES;
}
爲您的視圖添加第二個隱藏文本視圖。爲可見文本視圖實現shouldChangeTextInRange,並將隱藏視圖上的文本設置爲新文本。比較新舊文本的contentSize以檢測文字換行。
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
replacementText:(NSString *)text
{
if ([text isEqualToString:@"\n"]) {
textView.text=[NSString stringWithFormat:@"%@\n",textView.text];
// Return FALSE so that the final '\n' character doesn't get added
return NO;
}
// For any other character return TRUE so that the text gets added to the view
return YES;
}
我有點遲到了,但我也有類似的要求,有點調查後,我發現,KingofBliss的回答與
-[id<NSLayoutManagerDelegate> layoutManager:shouldBreakLineByWordBeforeCharacterAtIndex:];
-[id<NSLayoutManagerDelegate> layoutManager:shouldBreakLineByHyphenatingBeforeCharacterAtIndex:];
結合奏效了我。
您可以設置任何對象作爲UITextView
的佈局管理器的代表,像這樣:
textView.textContainer.layoutManager.delegate = (id<NSLayoutManagerDelegate>)delegate
希望這將證明是有用的。
對於斯威夫特利用這個
previousRect = CGRectZero
func textViewDidChange(textView: UITextView) {
var pos = textView.endOfDocument
var currentRect = textView.caretRectForPosition(pos)
if(currentRect.origin.y > previousRect?.origin.y){
//new line reached, write your code
}
previousRect = currentRect
}
對於目標C
CGRect previousRect = CGRectZero;
- (void)textViewDidChange:(UITextView *)textView{
UITextPosition* pos = textView.endOfDocument;
CGRect currentRect = [textView caretRectForPosition:pos];
if (currentRect.origin.y > previousRect.origin.y){
//new line reached, write your code
}
previousRect = currentRect;
}
我已經使用UITextViewTextDidChangeNotification。我如何在文本中查找\ n? textView.text不會返回到目前爲止輸入的整個文本類型嗎?一個自動換行術語包裝可能已經發生,或者我可能碰到了很多空間。在這種情況下,如何檢測下一行的到達? – Bourne 2011-02-02 12:24:22
@bourne:是它的檢測返回鍵 – KingofBliss 2011-02-02 12:39:26