UITextView继承UIScrollView,在显示大量文字的时候,可以通过上下滑动进行浏览。如果有点击屏幕左右两边,进行上一页或下一页操作的话,就需要在UITextView上添加UITapGestureRecognizer。值得注意的是,UITextView的editable属性要设置为NO,否则UITapGestureRecognizer失效。具体点击后运行的代码如下:
- (void)viewTap:(UIGestureRecognizer *)gesture
{
CGFloat currentY = self.textView.contentOffset.y;
CGFloat currentX = self.textView.contentOffset.x;
CGFloat screenW = [UIScreen mainScreen].bounds.size.width;
CGFloat screenH = [UIScreen mainScreen].bounds.size.height;
CGPoint point = [gesture locationInView:self.textView];
if (point.x > 0 && point.x < (screenW/3.0))
{
if (self.currentPage != 1)
{
currentY -= screenH;
self.textView.contentOffset = CGPointMake(currentX, currentY);
self.currentPage -=1;
}
else
{
NSLog(@"跳转到上一章");
return;
}
}
else if(point.x > (screenW/2.0) && point.x < screenW)
{
currentY += screenH;
if (self.currentPage != self.totalPage)
{
self.textView.contentOffset = CGPointMake(currentX, currentY);
self.currentPage +=1;
}
else
{
NSLog(@"跳转到下一章");
[self showTheStatusBar];
return;
}
}
else
{
}
self.pageNumLabel.text = [NSString stringWithFormat:@"%ld/%ld",(long)self.currentPage,(long)self.totalPage];
}
self.textView的总页数是通过字符串来计算出self.textView.contentSize.height,除以当前屏幕高度获得的。
可以在每次翻页的时候,在本地记录self.textView.contentOffset.y的值,再次进入阅读页面时,可以直接跳转到已阅读的位置。
自定义UITextView,取消显示选中后系统菜单,使用UIMenuController实现需求菜单及功能。