0

我有一个带有我创建的单元格的表格视图的代码。每个单元格包含三个按钮。每个按钮都应该有一个图像作为背景图像。

这是我的 CellForRowArIndex 代码:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"CellView" owner:self options:nil];
        cell = nibLoadedCell;
    }

    for (int i = 1; i < 4; i++) {
        //----- select the correct button from the cell
        button = (UIButton *)[cell viewWithTag:(i)];


        //----- cleaning the button, drawing it's corners, borders and giving it an action
        [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
        button.layer.borderWidth = 2;
        button.layer.cornerRadius = 5;
        button.clipsToBounds = YES;


        //------ Setting up the btnImg in order to place on the buttons (if is for checking i'm not taking pictures out of the array bounds)
        UIImage *btnImg = [[UIImage alloc] init];
        if (((indexPath.row * 3) + i - 1) < photosArray.count) {
            btnImg = [photosArray objectAtIndex:((indexPath.row * 3) + i - 1)];

            //NSLog(@"I am at indexpath.row: %d",indexPath.row);
            //NSLog(@"I show image number %d in the array",[photosArray indexOfObject:btnImg]);
            NSLog(@"Expression is: %d",((indexPath.row * 3) + i - 1));
        }


        //------ Add btnImg to the button
        [button setBackgroundImage:btnImg forState:UIControlStateNormal];



        //------ Giving special tags for each button in order to recognize it later
        button.tag = imageButtonTag;
        imageButtonTag--;
    }

    return cell;
}

如您所见,我的代码中的 for 循环负责从我的“photosArray”中获取图像并将它们放置在单元格中的正确按钮中。

问题: 前约 23 个按钮获得正确的图像。之后,(需要向下滚动一点)开始图像 24,图像开始重复。图像 24 等于图像 0。图像 25 等于图像 1,依此类推……</p>

我已经检查了很多东西。一切看起来都很好!我什至检查了 photosArray indexOfObject 并且数字是正确的。

您可能会认为数组是这样制作的。我也是这么想的,但我向你保证没关系。我删除了我的 for 循环,而是输入了以下代码:

//----- select the correct button from the cell

button = (UIButton *)[cell viewWithTag:(1)];
 //----- cleaning the button, drawing it's corners, borders and giving it an action
[button setBackgroundImage:nil forState:UIControlStateNormal];
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
button.layer.borderWidth = 2;
button.layer.cornerRadius = 5;
button.clipsToBounds = YES;

//------ Setting up the btnImg in order to place on the buttons
UIImage *btnImg = [photosArray objectAtIndex:indexPath.row];

//------ Add btnImg to the button
[button setBackgroundImage:btnImg forState:UIControlStateNormal];

这给了我一个 tableView,每个单元格中有一个按钮,按钮得到正确的图像......</p>

我尝试的最后一件事是,在创建 btnImg 之后,我之前的代码中的这段代码:

if ([btnImg isEqual:[photosArray objectAtIndex:0]]) {
    NSLog(@"Match found at: %d",[photosArray indexOfObject:btnImg]);
}

但是没有任何匹配项(尽管当我运行它时,我看到图像是相同的)。

这个问题让我发疯了大约一个星期,如果有人可以帮助我解决它,我将不胜感激。

谢谢!

4

1 回答 1

0

重置视图标签会导致它无法被识别。识别每个控件的更好方法是通过子类化或其他策略,特别是因为您使用标签来获取控件

于 2012-12-10T20:49:31.870 回答