ScrollView中的按钮未启用

时间:2011-05-26 12:00:17

标签: iphone uiscrollview uibutton uipagecontrol

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

7 个答案:

答案 0 :(得分:1)

要在触摸时更改图像

[menuButton setImage:menuImage2 forState:UIControlStateHighlighted];

另外请确保您拥有menubutton.showTouchOnHighlight = YES;

menuButton.adjustImageWhenHighlighted = YES;

也许scrollView接受触摸事件。试试这些

scrollView.delaysContentTouches = NO;
scrollView.canCancelContentTouches = NO;

答案 1 :(得分: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)];

所以原因与我添加到滚动视图的视图框架的位置有关。当滚动视图与分页一起使用时,似乎会出现此问题。当页面更改时,请确保scrollview中的视图也移动到同一帧。

答案 2 :(得分: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.pngmenuimageselected.png的两张图片都在那里。

答案 3 :(得分: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
 }

答案 4 :(得分:0)

 [menuImage release];

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

答案 5 :(得分:0)

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

 [scrollView bringSubviewToFront:button];

答案 6 :(得分:0)

  1. 我会在“for”括号内声明“J”。

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

  3. 您不应该发布“menuImage”。

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

  5. 编辑:

    不要这样做:

     [menuImage release];
     [menuButton release];
    

    也试试这个:

    - (void) menuButtonClicked: (id) sender {
    
        UIButton *btn = (UIButton *)sender;
        NSLog(@"clicked %d",[btn tag]);
    }