UITableViewCell中的自定义UIButton - 删除不起作用

时间:2011-03-28 22:32:35

标签: iphone objective-c uibutton tableview

我通过以下方式在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。

还有其他方法吗?按钮应该留在单元格中。

我希望这是可以理解的,对不起,我是德国人。 :)

3 个答案:

答案 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];
}

它会正常工作。