【发布时间】:2014-08-12 06:16:08
【问题描述】:
好的。我似乎无法对 tableviews 的工作方式有一个坚定的理解。有人可以向我解释一下如何在表格视图中重用单元格,尤其是在滚动时?我对此的主要痛点之一是,当我在一个单元格中创建一个动作时,当我滚动时其他单元格会受到影响。我尝试使用数组作为模型的后端,但我仍然得到了不应该改变的单元格。很难弄清楚为什么当数组中的模型没有改变时它们会改变。
一个简单的例子:
带有“喜欢”按钮的表格视图单元格。当我单击其中一个单元格中的按钮时,按钮文本变为“不喜欢”(到目前为止一切都很好)。但是当我向下滚动时,即使我没有选择它们,其他单元格也会显示“不像”。当我向上滚动时,我最初选择的单元格会再次更改,并且更新的单元格也会更改。
我似乎无法弄清楚这一点。如果你能给我看一个工作示例源代码,那就太棒了!!!谢谢!
- (void)viewDidLoad
{
[super viewDidLoad];
likeState = [[NSMutableArray alloc]init];
int i =0;
for (i=0; i<20; i++) {
[likeState addObject:[NSNumber numberWithInt:0]];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[myButton setTitle:@"Like" forState:UIControlStateNormal];
[myButton addTarget:self action:@selector(tapped:) forControlEvents:UIControlEventTouchUpInside];
myButton.frame = CGRectMake(14.0, 10.0, 125.0, 25.0);
myButton.tag =indexPath.row;
[cell.contentView addSubview:myButton];
if (cell ==nil) {
}
if ([[likeState objectAtIndex:indexPath.row]boolValue]==NO) {
[myButton setTitle:@"Like" forState:UIControlStateNormal];
}
else{
[myButton setTitle:@"Unlike" forState:UIControlStateNormal];
}
return cell;
}
-(void)tapped:(UIButton *)sender{
[likeState replaceObjectAtIndex:sender.tag withObject:[NSNumber numberWithInt:1]];
[sender setTitle:@"Unlike" forState:UIControlStateNormal];
}
【问题讨论】:
-
你能分享一些关于单元格创建、选择等的代码吗?
-
您的问题似乎在于
-cellForRowAtIndexPath:或-willDisplayingCell:forRowAtIndexPath:。分享你在其中的代码......还有一点点在你的backend array -
@Alladinian 我用代码更新了问题。我对
if (cell ==nil)下的内容更加困惑。让我知道你的想法。谢谢! -
@staticVoidMan 我用代码更新了问题。
-
@user3926564 : 你是通过 Storyboard 还是 xib 做的?
标签: ios uitableview uibutton