2012-05-10 4 views
0

나는 정말로 긴 문자열을 가지고 있으며 수천 줄의 기본 글꼴이 있습니다. 그래서 하나의 테이블 뷰 셀에 모든 것을 그려 넣기보다는 여러 개의 셀을 만들어 동일한 문자열을 그려서 각 문자열의 다음 부분을 그립니다.여러 개의 직사각형에 하나의 NSString 그리기

시작 지점을 찾는 데 어려움을 겪고 있습니다. 직사각형에있는 문자열의 높이의 처음 500 픽셀을 그려 봅시다 - 두 번째 rect에서 어디에서 시작해야하는지 어떻게 알 수 있습니까? 문자열이 같은 경우 문자열의 일부만 그리는 방법을 어떻게 지정할 수 있습니까?

각 셀은 자신의 행 번호를 알고 있으므로 테이블의 정확한 위치를 결정할 수 있습니다. 그려지는 부분을 문자열로 알 수는 없습니다.

또 다른 질문은 다음과 같습니다. 특정 줄 수를 기반으로 한 문자열을 여러 문자열로 나누려면 어떻게해야합니까?

편집 :는 여기에 내가 그 유용 할 수 있습니다 찾는거야 일부는 NSString 방법,하지만 난 아직도 내가 내 경우를 사용하는 것이 방법을 모르는이 수

- (void)getLineStart:(NSUInteger *)startIndex end:(NSUInteger *)lineEndIndex contentsEnd:(NSUInteger *)contentsEndIndex forRange:(NSRange)aRange 
- (NSRange)lineRangeForRange:(NSRange)aRange 

답변

1

사용 substringWithRange: 문자열의 시작과 끝 지점을 선택합니다. 각 부분을 여러 문자로 채 웁니다. 그래서 섹션 1은 0-500 섹션 2는 500-1000이 될 것입니다. 여기서 문제는 문장 중간에 끊어 질 수 있다는 것입니다. lineRangeForRange와 같은 것을 사용하여 하위 문자열의 범위를 결정할 수 있습니다.

lineRangeForRange 
Returns the range of characters representing the line or lines containing a given range. 

- (NSRange)lineRangeForRange:(NSRange)aRange 
Parameters 
aRange 
A range within the receiver. 
Return Value 
The range of characters representing the line or lines containing aRange, including the line termination characters. 

편집

NSString *string = @"tjykluytjghklukytgjhkkghkj sdkjlhfkjsadgfiulgeje fuaeyfkjasdgfueghf aksjgflkj. wyruehskjluishfoeifh uasyeajhkfa uiyelkjahsdf uayekljshdf aehkfjsd. \n I iheio;fajkdsf sdfhlueshkfjskdhf ujhelkjfh. luehljkfhlsdf. leufhlkjdshfa. \n euoiywhfldsjkhf euyhfsdlkj. ewhlkjfsd. euilhfsdkjishdkjf euhjklsfd. \n"; 
NSLog(@"string length:%i", [string length]); 
NSRange range; 
range.length = [string length]/2; 
range.location = 0; 
NSLog(@"LineRangeForRange:%i", [string lineRangeForRange:range].length); 
NSLog(@"Substring:%@", [string substringWithRange:[string lineRangeForRange:range]]); 

로그가 표시

string length:295 
LineRangeForRange:148 
Substring:tjykluytjghklukytgjhkkghkj sdkjlhfkjsadgfiulgeje fuaeyfkjasdgfueghf aksjgflkj. wyruehskjluishfoeifh uasyeajhkfa uiyelkjahsdf uayekljshdf aehkfjsd. 

그래서이 무슨 짓을 내가 문자열의 절반 0에서였다 LineRangeForRange 범위를 제공했다. 이 범위에서 마지막 줄 "\ n"을 쓸 수 있습니다. 그런 다음 해당 하위 문자열을 움켜 잡습니다.

+0

문장 중간에 잘리는 것은 경험을 망칠 것입니다. 나는 가능한 한 자연스럽고 싶었습니다. – Snowman

+0

lineRangeForRange 나는 당신의 문장을 자르지 않을 범위로 당신을 돌려 보낼 것이라고 믿습니다. . 예를 들어 0-500 자의 범위를 원할 경우 lineRangeForRange :를 0-500 범위와 함께 사용하고 범위 0-450 (줄 끝)을 반환하고 0-450에 substringWithRange를 사용합니다. – Jaybit

+0

lineRangeForRange가 정확히 무엇을하는지 기다려주세요. 나는 그것이주는 결과에 혼란스러워합니다. 0, 250을 주면 해당 문자 범위 내에서 완전한 라인을 반환합니다. – Snowman

0

앱에서 텍스트를 읽고 싶지는 않습니다. 왜 textView를 사용하지 않습니까?

편집 : 제 추천은 textView를 tableViewCell에 넣지 않고 텍스트의 시작 부분을 표시하고 클릭 할 때 textView를 표시하는 viewController를 푸시하는 것입니다. 메일과 같은 종류가 있습니다.

+0

표 셀에 텍스트보기를 넣고 싶지 않기 때문에 텍스트의 한 섹션에만 사용할 수 있습니다. 나눌 필요가 없으며 모든 섹션이 비슷한 스크롤 동작을해야합니다. 텍스트보기에는 자체의 스크롤 동작이 있으므로 테이블보기와 함께 사용하면 좋지 않은 경험을하게됩니다. – Snowman

+0

텍스트보기에서 스크롤을 해제 할 수 있는지 확인하십시오. – jrturton

+0

텍스트의 높이가 50,000 px가되는 – Snowman

관련 문제