iPhone:如何在UITableViewCell中更改默认删除按钮的框架

时间:2011-09-30 05:29:05

标签: iphone uitableview

我面临的问题是有没有办法改变默认框架 UITableView中删除按钮的另一个原因是删除按钮始终显示在UITableViewcell的单元格中心,因此可以更改删除按钮的框架。

// Update the data model according to edit actions delete or insert.
- (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
forRowAtIndexPath:(NSIndexPath *)indexPath 
{

    if (editingStyle == UITableViewCellEditingStyleDelete) 
    {
        [appDelegate.categories removeObjectAtIndex:indexPath.row];
        [categoryTableView reloadData];
    } 
}

#pragma mark Row reordering
// Determine whether a given row is eligible for reordering or not.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{   
    return YES;
}

// Process the row move. This means updating the data model to correct the item indices.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath 
      toIndexPath:(NSIndexPath *)toIndexPath 
{
    NSString *item = [[appDelegate.categories objectAtIndex:fromIndexPath.row] retain];
    [appDelegate.categories removeObject:item];
    [appDelegate.categories insertObject:item atIndex:toIndexPath.row];
    [item release];
}

提前致谢。

2 个答案:

答案 0 :(得分:3)

在ios 6.1中我无法使用上述代码。我已经看到了几个答案,建议对子类进行子类化并提供自定义 - willTransitionToState。更改子视图/按钮视图框不会有效地改变它的显示位置。

但是,如果您覆盖layoutSubviews方法,它将起作用。这是代码:

//below i moved the delete button to the left by 10 points. This is because my custom tableview has lef

- (void)layoutSubviews
{
    [super layoutSubviews];
    for(UIView *subview in self.subviews)
    {
        if([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationControl"])
        {
            CGPoint o = subview.center;
            subview.center = CGPointMake(o.x - 10, o.y);
        }
    }
}

答案 1 :(得分:0)

您可以通过设置单元格的editingAccessoryView属性来使用自己的视图。这可以包含您喜欢的任何帧,但如果您希望它看起来像标准删除按钮,则需要提供渐变。

在自定义单元格的xib文件中,添加一个任意大小的新按钮(只要它小于单元格!)。此按钮不应是单元格的子视图,而是文件中的单独项目。

将此按钮连接到单元格的editingAccessoryView插座,它将替换标准删除按钮。