무거운 반복 계산 대신에 textView와 get the last displayed character position으로 텍스트를 완료 (이전 페이지 끝에서 시작)로 설정했습니다. 그런 다음 빠른 역방향 검색을 수행하여 단어/문장을 자르기가 쉽습니다.
나는 다음과 같은 솔루션, 스크롤을 방지하고 좋네요 보이게하기 위해 마지막 부분 표시 줄을 건너 뛰는 조금 까다로운 부분이 있어요. 단어 또는 문장 줄 바꿈을하려면 endCutIndex
으로 이동해야합니다.
호출기가 아닌 텍스트 뷰와 기본 프로젝트는 여기에 .H 파일의 비트의 here
- (void)viewDidLoad {
[super viewDidLoad];
NSString * fullText = @"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.";
pageControlBeingUsed = NO;
int pageNumber = 0;
UIFont * theFont = [UIFont boldSystemFontOfSize:30];
const CGSize charSize = [@"A" sizeWithFont:theFont];
while (fullText.length > 0) {
CGRect frame;
frame.origin.x = self.scrollView.frame.size.width * (pageNumber++);
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
UIView *subview = [[UIView alloc] initWithFrame:frame];
UITextView * textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
textView.font = theFont;
[subview addSubview:textView];
[textView release];
textView.text = fullText;
CGRect bounds = textView.bounds;
// - charSize.height to skip a partially visible line
// - charSize.width*2 to skip annoying character still displayed at partially visible line
CGPoint endPoint = CGPointMake(CGRectGetMaxX(bounds) - charSize.width*2, CGRectGetMaxY(bounds) - charSize.height);
UITextPosition *start = [textView characterRangeAtPoint:bounds.origin].start;
UITextPosition *end = [textView characterRangeAtPoint:endPoint].end;
const int startCutIndex = [textView offsetFromPosition:textView.beginningOfDocument toPosition:start];
const int endCutIndex = [textView offsetFromPosition:textView.beginningOfDocument toPosition:end];
NSString * cutText = [fullText substringToIndex:endCutIndex];
textView.text = cutText;
fullText = [fullText substringFromIndex:endCutIndex];
[self.scrollView addSubview:subview];
[subview release];
NSLog(@"Page (1-total) %d, start text index %d, end text index %d \ntext:%@", pageNumber, startCutIndex, endCutIndex, cutText);
}
const int totalPages = pageNumber;
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * totalPages, self.scrollView.frame.size.height);
self.pageControl.currentPage = 0;
self.pageControl.numberOfPages = totalPages;
}
에서 가져온 것입니다 :
@interface FCContentViewController : UIViewController <UIScrollViewDelegate, UITextViewDelegate>{
UIPageControl *pageControl;
NSString *trunkedString;
UITextView *bodyText;
}
@property (nonatomic, retain) UIScrollView *scrollView;
@property (nonatomic, retain) NSString *bodyTextString;
나는 이것을 성공시키지 않고 춤추려고했습니다. 위의 코드를 살펴보십시오. 이러한 종류의 솔루션은 내가 찾고있는 것이지만 작동하지 않으며 코드를 여러 가지 방식으로 변경하여 내 마음에 드는 방식으로 시도했습니다. UITextView 내에서 전체 텍스트의 마지막 문자를 가져옵니다. 즉, UITextView의 스크롤링 부분으로 잘린 모든 텍스트를 가져옵니다. 본문 텍스트 문자열은 항상 반환 된 길이로 나옵니다. – TheCodingArt
반환 할 생성 된 범위의 두 번째 인수로'[self.textView offsetFromPosition : self.textView.beginningOfDocument toPosition : end]'여야합니다. 이 방법은 나를 위해 잘 작동합니다. 이제는 부분적으로 보이는 텍스트가'characterRangeAtPoint :'에 의해 감지되는 문제가 있지만, 반드시 그 텍스트가 마지막 textView.text 문자는 아니어야합니다. –
Arg, 방금 시도했는데 성공하지 못한 채로 시도해 보았습니다. 위 콘솔 출력에 수정 된 코드를 추가했습니다. 또한 텍스트가있는 화면을 추가했습니다. 텍스트가 거의 모든 추가 단락으로 이어지는 것에 유의하십시오 (단 한 줄이 아님). 그것은 여전히 잘못된 단어를 반환하는 끝에 대한 값입니다, 그래서이 문제는 반환 된 입력 훨씬 전에 발생합니다. – TheCodingArt