1

Erica Sadun のスクロール ビューの例を使用して、プロジェクトを作成しました。プロジェクトにスクロール ビューとページ コントロールが追加されました。以下に示すように、ページごとに新しいビューを作成し、それをスクロール ビューに追加します。各ビューには 5 つのボタンがあるため、5 つずつスクロールできます。ただし、ボタンは有効になっていないようです。理由はありますか?

    // Create the scroll view and set its content size and delegate
    sv = [[[UIScrollView alloc] initWithFrame:CGRectMake(0.0f, 200.0f, 300.0f, 60.0f)] autorelease];
    sv.contentSize = CGSizeMake(NPAGES * 300.0f, sv.frame.size.height);
    sv.pagingEnabled = YES;
    sv.delegate = self;


    // Load in all the pages
    for (int i = 0; i < NPAGES; i++)
    {
        UIView *menuView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 300.0f, 60.0f)];


    for (int j = 0; j < 5 * (i+1); j++)
        {
            UIImage *menuImage = [UIImage imageNamed:@"menuimage.png"];
            UIImage *menuImage2 = [UIImage imageNamed:@"menuimageselected.png"];
UIButton *menuButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain];

            menuButton.frame = CGRectMake(j * 60.0f, 0.0f, 60.0f, 60.0f);
            [menuButton addTarget:self action:@selector(menuButtonClicked) forControlEvents:UIControlEventTouchUpInside];


        menuButton.tag = j + 5 * i;

            menuButton.backgroundColor = [UIColor clearColor];
            [menuButton setImage:menuImage forState:UIControlStateNormal];
            [menuButton setImage:menuImage2 forState:UIControlStateSelected];
            [menuButton setImage:menuImage2 forState:UIControlStateHighlighted];
            [menuButton setEnabled:YES];


            [menuImage release];
            [menuButton release];
            [menuView addSubview:menuButton];

        }

        [sv addSubview:menuView];
        [sv bringSubviewToFront:menuView];

        [menuView release];

    }

    [self.view addSubview:sv];
4

7 に答える 7

1

タッチ使用で画像を変更するには

[menuButton setImage:menuImage2 forState:UIControlStateHighlighted];

また、あなたが持っていることを確認してmenubutton.showTouchOnHighlight = YES;ください

menuButton.adjustImageWhenHighlighted = YES;

おそらく scrollView がタッチイベントを受け取ります。これらを試してください

scrollView.delaysContentTouches = NO;
scrollView.canCancelContentTouches = NO;
于 2011-05-26T12:26:47.463 に答える
1

スクロール ビューに追加するビューのフレームを変更することで、この問題を解決しました。したがって、この行の代わりに:

UIView *menuView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 300.0f, 60.0f)];

ページを変更するたびに、ビューのフレームを変更するようになりました。

UIView *menuView = [[UIView alloc] initWithFrame:CGRectMake(i * 300.0f, 0.0f, 300.0f, 60.0f)];

その理由は、スクロールビューに追加していたビューのフレームの位置に関連していました。この問題は、スクロール ビューとページングを併用した場合に発生するようです。ページが変更されたら、スクロールビュー内のビューも同じフレームに移動することを確認してください。

于 2011-05-26T20:29:53.147 に答える
0
  1. 「for」括弧内に「J」を宣言します。

  2. UIButtonを保持してから、解放します。割り当てていないので、どちらも行う必要はありません。

  3. 「menuImage」をリリースしないでください。

  4. UIButtonの選択された状態に「menuImage2」を割り当てています。UIControlStateHighlightedである必要があります。

編集:

これをしないでください:

 [menuImage release];
 [menuButton release];

また、これを試してください:

-(void)menuButtonClicked:(id)sender {

    UIButton * btn =(UIButton *)sender;
    NSLog(@ "クリックされた%d"、[btnタグ]);
}
于 2011-05-26T14:04:41.180 に答える
0
 [menuImage release];

menuImageリリースしてはいけません。`[UIImage imageNamed:] から来ており、自動解放されたオブジェクトです。画像オーバーリリースの原因となります。

于 2011-05-26T12:41:42.347 に答える
0

このコードを試してください

for (int i = 0; i < NPAGES; i++)
{
    UIView *menuView = [[[UIView alloc] initWithFrame:CGRectMake(i * 300.0f, 0.0f, 300.0f, 60.0f)] autorelease];

    for (j = 0; j < 5 ; j++)
    {
        UIImage *menuImage = [UIImage imageNamed:@"menuimage.png"];
        UIImage *menuImage2 = [UIImage imageNamed:@"menuimageselected.png"];
        UIButton *menuButton = [UIButton buttonWithType:UIButtonTypeCustom];
        menuButton.frame = CGRectMake(j * 60.0f, 0.0f, 60.0f, 60.0f);
        menuButton.backgroundColor = [UIColor clearColor];
        [menuButton setImage:menuImage forState:UIControlStateNormal];
        [menuButton setImage:menuImage2 forState:UIControlStateHighlighted];
        [menuButton setEnabled:YES];
        [menuButton addTarget:self action:@selector(someSelector)  forControlEvents:UIControlEventTouchUpInside];

        [menuView addSubview:menuButton];
    }

    [sv addSubview:menuView];
}

menuimage.png と という名前の 2 つの画像があることを確認してくださいmenuimageselected.png

于 2011-05-26T12:26:27.637 に答える
0

これを試してみてください。あなたのケースでうまくいくかどうかはわかりません。

 [scrollView bringSubviewToFront:button];
于 2011-05-26T12:43:41.547 に答える
0

このコードを scrollView 内に実装してください

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(X, Y, Width, Height);
    btn.tag = //your tag Number;
    [btn addTarget:self action:@selector(showGameDetail:) forControlEvents:UIControlEventTouchUpInside];

そして、このメソッドを追加します

 -(IBAction)showGameDetail:(id)sender
 {
    //Your Code
 }
于 2011-05-26T12:29:35.890 に答える