Iphone UITableView单元格按钮混淆
我有一个问题,将按钮设置为Iphone UITableView单元格按钮混淆,iphone,ios,objective-c,uitableview,Iphone,Ios,Objective C,Uitableview,我有一个问题,将按钮设置为UITableviewCell 在viewDidLoad之后,按钮位于正确的位置。但当我向下滚动时,按钮位于其他任何位置。 这是我的代码,希望你能帮助我 提前谢谢 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITabl
UITableviewCell
在
viewDidLoad
之后,按钮位于正确的位置。但当我向下滚动时,按钮位于其他任何位置。这是我的代码,希望你能帮助我
提前谢谢
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
if (indexPath.section == 0 && indexPath.row == 0 && _isAddImageViewLoad == NO) {
// Add Image Button
UIButton *addImage = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage* image = [UIImage imageNamed:@"AddImage@2x"];
addImage.frame = CGRectMake(110.0f, 10.0f, 110.0f, 110.0f);
[addImage setImage:image forState:UIControlStateNormal];
[cell.contentView addSubview:addImage];
_isAddImageViewLoad = YES;
} else {
NSDictionary *dictionary = [_items objectAtIndex:indexPath.section];
NSArray *array = [dictionary objectForKey:@"data"];
NSString *cellValue = [array objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
}
return cell;
}看看这行代码:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
这行代码意味着并非每次都创建UITableViewCells
。它们在你上下滚动时被重复使用。使用上面的代码,将在正确的位置创建ui按钮
,但在重复使用单元格时,它将在随机点创建按钮
一个快速解决问题的方法是,将上面的代码行更改为simply
UITableViewCell *cell;
请看这行代码:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
这行代码意味着并非每次都创建UITableViewCells
。它们在你上下滚动时被重复使用。使用上面的代码,将在正确的位置创建ui按钮
,但在重复使用单元格时,它将在随机点创建按钮
一个快速解决问题的方法是,将上面的代码行更改为simply
UITableViewCell *cell;
这是因为您正在重复使用单元格,而按钮在您的else部分不应该是一个简单的解决方案时被放置。写入
addImage.hidden=YES代码>并在if语句中放入addImage.hidden=NO代码>这是因为您正在重复使用单元格,而按钮被放置在您的else部分不应该是一个简单的解决方案的时候。写入addImage.hidden=YES代码>并在if语句中放入addImage.hidden=NO代码>只有几件事。如果您使用“AddImage”,它将使用“AddImage@2x“如果是视网膜显示器,则自动显示。我不认为这会解决你的问题,但它可能会导致奇怪
当一个表视图单元格从视图中滚动出来时,它在某种意义上是“循环”的。看起来您正在使用bool来排除使用按钮再次加载原始单元格。如果您始终希望按钮位于“顶部”,则可能需要使用标题来按住按钮。您可能还需要验证在重新使用单元格时是否删除了按钮。如果不是,它将显示在重用该单元格的下一行中
顺便说一句。。。按钮在表格视图单元格中通常不能很好地工作,因为它们以非常不同的方式处理触摸。这是相当多的修改,让他们感觉自然,但那是另一回事
希望有帮助 就几件事。如果您使用“AddImage”,它将使用“AddImage@2x“如果是视网膜显示器,则自动显示。我不认为这会解决你的问题,但它可能会导致奇怪
当一个表视图单元格从视图中滚动出来时,它在某种意义上是“循环”的。看起来您正在使用bool来排除使用按钮再次加载原始单元格。如果您始终希望按钮位于“顶部”,则可能需要使用标题来按住按钮。您可能还需要验证在重新使用单元格时是否删除了按钮。如果不是,它将显示在重用该单元格的下一行中
顺便说一句。。。按钮在表格视图单元格中通常不能很好地工作,因为它们以非常不同的方式处理触摸。这是相当多的修改,让他们感觉自然,但那是另一回事
希望有帮助 问题在于单元重用。如果按钮退出,您需要在else子句中添加一些代码来删除它。一种方法是为按钮添加一个标签,如:
addImage.tag = 10;
然后在你的else条款中:
}else{
if (cell viewWithTag:10) [[cell viewWithTag: 10] removeFromSuperview];
...
问题在于单元重用。如果按钮退出,您需要在else子句中添加一些代码来删除它。一种方法是为按钮添加一个标签,如:
addImage.tag = 10;
然后在你的else条款中:
}else{
if (cell viewWithTag:10) [[cell viewWithTag: 10] removeFromSuperview];
...
问题在于单元的出列。tableview第一次创建单元格时,所有单元格都会通过
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
代码。但当第0节第0行移出屏幕时,该单元格将被推入单元格可重用队列
现在,当tableview需要显示第0节第0行时,它将从重用队列中获取一个单元格。您将无法获得与第一次相同的单元格。现在你可能有两个带按钮的单元格
您应该为节0第0行以及所有其他节和行使用不同的CellIdentifier。创建单元格时也要创建按钮。因此,在tableView首次创建单元格后,您将不会创建按钮“一切”。问题在于单元格的出列。tableview第一次创建单元格时,所有单元格都会通过
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
代码。但当第0节第0行移出屏幕时,该单元格将被推入单元格可重用队列
现在,当tableview需要显示第0节第0行时,它将从重用队列中获取一个单元格。您将无法获得与第一次相同的单元格。现在你可能有两个带按钮的单元格
您应该为节0第0行以及所有其他节和行使用不同的CellIdentifier。创建单元格时也要创建按钮。因此,在tableView第一次创建单元格后,您将不会创建按钮所有内容。那么他不会重用单元格,滚动性能将受到影响,而不是不重用单元格。最好使用两个单独的标识符,一个带按钮,另一个不带按钮。这也是一个选项,但不重用单元格,绝对不是一个选项如果他不重用单元格,滚动性能将受到影响,而不是不重用单元格最好使用两个单独的标识符,一个带按钮,另一个带not。这也是一个选项,但不重用单元格,当然不是一个选项。你能提供更多的信息,让问题更清楚一点吗?你能提供更多的信息,让问题更清楚一点吗