我通过以下方式在TableViewCell中获得了自定义UIButton:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *ident = @"indet";
cell = [tableView dequeueReusableCellWithIdentifier:ident];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:ident] autorelease];
}
button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setFrame: CGRectMake( 230.0f, 7.5f, 43.0f, 43.0f)];
[button setImage:[UIImage imageNamed:@"check_bak.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(removeEntry) forControlEvents:UIControlEventTouchUpInside];
button.tag = [indexPath row];
[cell addSubview:button];
cell.textLabel.text = [myArray objectAtIndex:indexPath.row];
cell.textLabel.textColor = [UIColor blackColor];
cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:20.0];
cell.textLabel.shadowColor = [UIColor whiteColor];
cell.textLabel.shadowOffset = CGSizeMake(0,1);
return cell;
}
我在我的.h中为removeEntry函数声明了indexPath。
removeEntry:
[myArray removeObjectAtIndex:indexPath.row];
[myTable reloadData];
myArray是一个NSMutableArray。
这种方法无效。
每次我删除indexPath.row中的条目时,它都会删除一个条目。但错了。它总是被删除之前的一个条目。即使我做indexPath.row + 1 / -1。
还有其他方法吗?按钮应该留在单元格中。
我希望这是可以理解的,对不起,我是德国人。 :)
答案 0 :(得分:0)
表视图中有多少个部分?在removeEntry方法中向控制台打印indexPath.row的值可能是个好主意。如果单击第一行,是否打印出0?第五行,是打印出来的等等。
编辑:查看代码,您将索引路径存储为按钮的标记。在这种情况下,将removeEntry方法更改为这样(您可以将返回类型更改为您想要返回的内容):
- (void)removeEntry:(id)sender {
在添加目标时,在“removeEntry”之后添加冒号:
[button addTarget:self action:@selector(removeEntry:) forControlEvents:UIControlEventTouchUpInside];
现在,在removeEntry中,你可以这样做:
UIButton *button = (UIButton *)sender;
[myArray removeObjectAtIndex:button.tag];
[myTable reloadData];
答案 1 :(得分:0)
使用以下代码安静
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *ident = @"indet";
cell = [tableView dequeueReusableCellWithIdentifier:ident];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:ident] autorelease];
}
if ([cell.contentView subviews]){
for (UIView *subview in [cell.contentView subviews]) {
[subview removeFromSuperview];
}
}
//below here your piece of code.
}
这样做的原因是,在我们重用单元格的方法中,它保留了添加到单元格的所有子视图,只刷新了单元格的文本部分。
希望这对你有用!!
答案 2 :(得分:0)
我在使用UITableView进行iOS编码时遇到了同样的问题。 我通过在cell.contentView上添加按钮并将其从cell.contentView中删除来修复它。
使用
添加按钮[cell.contentView addSubview:button];
而不是[cell addSubview:button];
在将视图添加到单元格以从单元格中删除按钮之前,将以下代码行添加到cellForRowIndexPath()方法中。
for(UIView *subview in [cell.contentView subviews]){
[subview removeFromSuperView];
}
它会正常工作。