1

使用 Erica Sadun 的滚动视图示例,我创建了一个项目。我现在在我的项目中有一个滚动视图和一个页面控件。我为每个页面创建一个新视图并将其添加到我的滚动视图中,如下所示。每个视图都有 5 个按钮,所以我可以滚动 5 x 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

试试这个代码

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 和 的图像menuimageselected.png是否存在。

于 2011-05-26T12:26:27.637 回答
0

请在您的滚动视图中实现此代码

    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 回答
0
 [menuImage release];

menuImage不应该被释放。它来自`[UIImage imageNamed:],它是一个自动释放的对象。这将导致图像过度释放。

于 2011-05-26T12:41:42.347 回答
0

试试这个,我不确定它是否适用于你的情况。

 [scrollView bringSubviewToFront:button];
于 2011-05-26T12:43:41.547 回答
0
  1. 我会在“for”括号内声明“J”。

  2. 您保留 UIButton 然后释放它。您也不需要这样做,因为您没有分配它。

  3. 你不应该释放“menuImage”。

  4. 您正在将“menuImage2”分配给 UIButton 的选定状态。它应该是 UIControlStateHighlighted。

编辑:

不要这样做:

 [menuImage release];
 [menuButton release];

也试试这个:

- (void) menuButtonClicked: (id) sender {

    UIButton *btn = (UIButton *)sender;
    NSLog(@"点击了 %d",[btn 标签]);
}
于 2011-05-26T14:04:41.180 回答