我有一个表格视图的代码,其中包含我创建的单元格。每个单元格都有三个按钮。每个按钮都应该有一个图像作为背景图像。
这是我的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,依此类推......
我已经检查了很多东西。一切都很好看!我甚至检查了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,每个单元格中有一个按钮,按钮得到正确的图像......
我尝试的最后一件事是,在创建btnImg后,我之前的代码中的代码是正确的:
if ([btnImg isEqual:[photosArray objectAtIndex:0]]) {
NSLog(@"Match found at: %d",[photosArray indexOfObject:btnImg]);
}
但是没有任何东西匹配(虽然当我运行它时我看到图像是相同的)。
这个问题让我疯狂了大约一个星期了,如果有人能帮我解决,我真的很感激。
谢谢!
答案 0 :(得分:0)
重置视图标记会导致无法识别。识别每个控件的更好方法是通过子类化或其他策略,特别是因为您使用标记来获取控件