1

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

我想我可以通过将 UITextView 放在 UIScrollView 中来做到这一点,该 UIScrollView 的 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 的一些基本内容,因为我似乎无法使其正常工作。

保罗

4

1 回答 1

2

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

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

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

您将需要听 uiscrollview 委托方法以了解您在哪个页面上,并且您需要在用户滚动时重新计算和填充页面

如果用户滚动到下一页,则将您拥有 2 页的 textview 移回,并将其移动到新的“下一页”页面。这被称为“回收”您的观点,并且有很多关于此的示例代码问题

于 2009-09-16T21:14:23.617 回答