2013-07-09 5 views
5

Есть ли способ (сумасшедшие хаки приветствовать), чтобы получить текущую строку в виде строки UITextView? Это будет включать в себя перенос слов и т.д. Например, в данном случае:UITextView получить текущую строку

enter image description here

метод будет возвращать «? Переполнение стека Разве это не здорово я», потому что это текущая линия, основанная на курсоре ,

Он также может вернуться «Это тест, который я сделал для» или «думаю так», в зависимости от положения курсора. Я пробовал работать как с методами UITextView, так и с протоколом UITextInput.

EDIT:

Вот код, который я пытался использовать. Причина, по которой мне нужно найти строку, - это получить ее длину, поэтому именно поэтому вы увидите код на основе интерфейса.

NSRange location = self.textView.selectedRange; 
NSString *searchString = [self.textView.text substringWithRange:NSMakeRange(0, location)]; 
CGSize currentStringDimensions = [searchString sizeWithFont:self.textView.font constrainedToSize:CGSizeMake(self.textView.frame.size.width, self.textView.frame.size.height) lineBreakMode:NSLineBreakByWordWrapping];  
float numberOfRows = (currentStringDimensions.width/(self.textView.frame.size.width)); 
float left = (float)(numberOfRows - (int)numberOfRows) * (self.textView.frame.size.width); 

Это не работает. Я думаю, что это могло бы иметь что-то со словами, которые были обернуты или персонажи разного размера, но левое значение непоследовательно или выключено после первой строки.

+0

Показать код, который вы пробовали и то, что он на самом деле вернулся, как близко ты получил (я бы сказал, что 'UITextInput' является правильный подход). – Wain

+0

Будет ли обновлять главный вопрос с ним – roozbubu

+1

Посмотрите это - http://stackoverflow.com/questions/4421267/how-to-get-text-from-nth-line-of-uilabel/14413484#14413484 – TheTiger

ответ

0

В результате я использовал метод caretRect UITextInput, чтобы получить смещение слева. Работала безупречно.

+1

Можете ли вы опубликовать рабочий код для других посмотреть? – jonathanpeppers

+0

@jonathanpeppers К сожалению, я не могу. Это было для оплачиваемой стажировки, которую я делал прошлым летом, поэтому код недоступен. – roozbubu

+1

Можете ли вы повторно реализовать пример самостоятельно и опубликовать его? Похоже, что это точка StackOverflow, это не должен быть принятый ответ, если на самом деле он не содержит ответа. – jonathanpeppers

2

Решение следующего кода работает. «Я» в этом коде относится к экземпляру UITextView.

- (NSString *) getLineString:(NSRange)range 
{ 
    NSLayoutManager *manager = self.layoutManager; 

    // Convert it to a glyph range 
    NSRange matchingGlyphRange = [manager glyphRangeForCharacterRange:range actualCharacterRange:NULL]; 

    // line fragment rect at location range 
    CGRect rect = [manager lineFragmentRectForGlyphAtIndex:matchingGlyphRange.location effectiveRange:nil]; 

    // obtain the line range for the line fragment rect 
    NSRange lineRange = [manager glyphRangeForBoundingRect:rect inTextContainer:self.textContainer]; 

    // extract the string out from lineRange 
    return [self.text substringWithRange:lineRange]; 
} 

// ... later 
NSLog(@"line %@", [self getLineString:self.selectedRange]); 
0

Это работало для меня (само = UITextView)

func getLineString() -> String { 
    return (self.text! as NSString).substringWithRange((self.text! as NSString).lineRangeForRange(self.selectedRange)) 
} 
Смежные вопросы