このチュートリアルの 2 つのビューでページングを実装しようとしました。
子ビューが 2 つだけの UIScrollView 内の複数の仮想ページ
UIScrollView をページに配置し、すべてのページで新しいコンテンツで更新することで、これを変更したかったのです。
-(void)addContent:(NSString*)txt{
int size = 5;
UITextView *txtView;
int row = 0;
//from left
int xPlace = 0;
//space between row's
int rowSpace = 20;
//from top
int yPlace = 10;
// int button_with = scrollView.frame.size.width;
int button_height = 20;
for (int i = 0; i < size; i++) {
txtView = [[UITextView alloc] initWithFrame:CGRectMake(xPlace, row*rowSpace+yPlace, scrollView.frame.size.width, 2*button_height)];
[txtView setFont:[UIFont fontWithName:@"ArialMT" size:14]];
txtView.backgroundColor = [UIColor blueColor];
[txtView setText:[NSString stringWithFormat:@"Numer %@ - %i",txt,i]];
// answerCheck.titleLabel.font = [UIFont boldSystemFontOfSize:fontSize];
[scrollView addSubview:txtView];
[txtView release];
row++;
}
[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, txtView.frame.size.height*size)];
}
アイデアは、スクロール時に uiviewcontroller を新しいコンテンツに置き換えるだけです。次のように呼び出します。
- (void)setPageIndex:(NSInteger)newPageIndex
{
pageIndex = newPageIndex;
if (pageIndex >= 0 && pageIndex < [[DataSource sharedDataSource] numDataPages])
{
NSDictionary *pageData =
[[DataSource sharedDataSource] dataForPage:pageIndex];
label.text = @"Tekstas";//[pageData objectForKey:@"pageName"];
textView.text = [pageData objectForKey:@"pageText"];
[self addContent:[pageData objectForKey:@"pageText"]];
CGRect absoluteRect = [self.view.window
convertRect:textView.bounds
fromView:textView];
if (!self.view.window ||
!CGRectIntersectsRect(
CGRectInset(absoluteRect, TEXT_VIEW_PADDING, TEXT_VIEW_PADDING),
[self.view.window bounds]))
{
textViewNeedsUpdate = YES;
}
}
}
さて、ここで立ち往生しました。テキスト ビューは更新されていますが、UIscrollView の新しいコンテンツが iPad シミュレーターで更新されません。
はい、iPhoneでは機能しますが、iPadでは機能しません。この機能を実現したい場合、何を改善できますか?
iOS 5 からページングを行う方法が他にあるのではないでしょうか?
動作させようとしたソースを入れます。