如何使用Paging移动多页文本

时间:2009-09-16 20:28:37

标签: iphone uiscrollview uitextview

我正在开发一个视图,允许我显示大量文本,并通过一次显示一个页面并允许用户左右滚动来移动它。

我想我可以通过在UIScrollView中放置一个UITextView来实现它,它将pagingEnabled属性设置为YES,同时将内容宽度设置为屏幕的倍数。

我看到的只是第一页,虽然我可以向右滑动并查看其他空白页面。任何人都可以提供任何提示。这是代码......

label = [[UITextView alloc] initWithFrame: scroller.frame];

label.editable = NO;

label.scrollEnabled = NO;

label.multipleTouchEnabled = NO;

label.userInteractionEnabled = NO;

label.font = [UIFont systemFontOfSize: 14.0];

// Get text 
std::string str;

// Next line gets a single string, which is from 2000 to 8000

//characters long
str = GetStringContent();

NSString * nsStr = [NSString stringWithCString: str.c_str()];

// Measure text that will display in one page.
CGRect rect = CGRectMake(0.0, 0.0, scroller.frame.size.width, scroller.frame.size.height);
CGSize calcSize = [nsStr sizeWithFont: [UIFont systemFontOfSize: 14.0] 
constrainedToSize: rect.size lineBreakMode: UILineBreakModeWordWrap];
rect.size = calcSize;

CGRect maxRect = CGRectMake(0.0, 0.0, self.view.bounds.size.width, 99999.0);

CGSize maxCalcSize = [nsStr sizeWithFont: [UIFont systemFontOfSize: 14.0] 

constrainedToSize: maxRect.size lineBreakMode: UILineBreakModeWordWrap];

float pages = maxCalcSize.height / self.view.bounds.size.height;

int numberOfPages = (int)ceil(pages);

// Set text
label.text = [NSString stringWithCString: str.c_str()];

// Setup scroller
scroller.scrollEnabled = YES;

scroller.pagingEnabled = YES;

scroller.bounces = YES;


scroller.contentSize = CGSizeMake(label.frame.size.width * numberOfPages, scroller.frame.size.height);


scroller.contentOffset = CGPointMake(0, 0); 

scroller.frame = rect;

scroller.clipsToBounds = YES;

[scroller addSubview: label];

[label sizeToFit];

视图在IB中创建,UIScrollView被添加到IB中,“scroller”是插座的名称。

我一直在研究这个问题,感觉我错过了一些关于UIScrollView的基本知识,因为我似乎无法实现这一点。

保罗

1 个答案:

答案 0 :(得分:2)

分页只是意味着滚动视图将“捕捉”到滚动视图的宽度。这意味着当你向左滑动时,下一页将会出现,但是以320的增量停止,无论你有多大的宽度。

要做你想做的事情,你需要的代码比你要多一些。我首先制作3个文本视图并将它们保存在一个数组中,但你只能一次显示1个。

您需要实现逻辑以确定要在这些文本视图上显示的内容(要显示的文本部分),并使用此逻辑填充当前页面,上一页和下一页。

您需要听取uiscrollview委托方法以了解您所在的页面,并且您需要在用户滚动时重新计算并填充页面

如果用户滚动到下一页,您将获取2页的文本视图,并将其移动到新的“下一页”。这称为“回收”您的观点,并且plenty of questions on SO对此示例代码