3

このチュートリアルの 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 からページングを行う方法が他にあるのではないでしょうか?

動作させようとしたソースを入れます。

ソースをダウンロード

4

1 に答える 1

2

nibファイル add aUIScrollViewと fixwidthおよびを使用するだけheightです。いくつかのページを として作成し、同じサイズで同じUIViewに追加します。主に:UIScrollVieworiginUIView

- (void)viewDidLoad
{
    [super viewDidLoad];

    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, scrollView.frame.size.height * 2);
}

-(void)viewWillAppear:(BOOL)animated{
    CGFloat h = scrollView.frame.size.height;
    [pageView1 setFrame:CGRectMake(0, 0, pageView1.frame.size.width, pageView1.frame.size.height)];

    [pageView2 setFrame:CGRectMake(0, h, pageView2.frame.size.width, pageView2.frame.size.height)];
}

ファイル内のsをチェックPaging Enabledすることを忘れないでください。UIScrollViewAttributenib

お役に立てれば幸いです!

于 2012-07-09T08:32:35.187 に答える