繁体   English   中英

在UITableView的编辑模式下获取indexPath

[英]Get indexPath on UITableView's editing mode

我有一个带有CustomCell的UITableView。 每当UITableView处于编辑模式时,我在CustomCell中都有以下代码。

- (void)willTransitionToState:(UITableViewCellStateMask)state{

    [super willTransitionToState:state];

    if (state == UITableViewCellStateShowingEditControlMask)
    {
        self.delBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [self.delBtn setFrame:CGRectMake(10, 15, 25, 25)];
        [self.delBtn setImage:[UIImage imageNamed:@"noSelection.png"] forState:UIControlStateNormal];
        buttonCurrentStatus = YES;
        [self.delBtn addTarget:self action:@selector(delBtnPressed:) forControlEvents:UIControlEventTouchUpInside];
        [self addSubview:self.delBtn];
    }
    else
    {
        if(self.delBtn)
        {
            [self.delBtn removeFromSuperview];
            self.delBtn = nil;
        }
    } }

- (void)delBtnPressed:(id)sender {
    if (buttonCurrentStatus == NO)
    {
        buttonCurrentStatus = YES;
        [self.delBtn setImage:[UIImage imageNamed:@"noSelection.png"] forState:UIControlStateNormal];
    }
    else
    {
        buttonCurrentStatus = NO;
        [self.delBtn setImage:[UIImage imageNamed:@"selection.png"] forState:UIControlStateNormal];
    } }

现在如何从UITableview的CustomCell获取indexPath?

您可以使用UITableView indexPathForCell:

显然,为此,您需要引用单元格类内部的表。 如果要使其成为单元格的属性,请确保使其变weak以避免引用循环。

我发现执行此操作的最佳方法是在单元格上创建Delegate / Protocol。 使该委托成为ViewController并将其传递。然后您可以在该时刻在表视图上调用indexPathForCell。 下面的例子。

- (void)willTransitionToState:(UITableViewCellStateMask)state{

    [super willTransitionToState:state];

    if (state == UITableViewCellStateShowingEditControlMask)
    {
        self.delBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [self.delBtn setFrame:CGRectMake(10, 15, 25, 25)];
        [self.delBtn setImage:[UIImage imageNamed:@"noSelection.png"] forState:UIControlStateNormal];
        buttonCurrentStatus = YES;
        [self.delBtn addTarget:self action:@selector(delBtnPressed:) forControlEvents:UIControlEventTouchUpInside];
        [self addSubview:self.delBtn];
    }
    else
    {
        if(self.delBtn)
        {
            [self.delBtn removeFromSuperview];
            self.delBtn = nil;
        }
    } }

- (void)delBtnPressed:(id)sender {
    if (buttonCurrentStatus == NO)
    {
        buttonCurrentStatus = YES;
        [self.delBtn setImage:[UIImage imageNamed:@"noSelection.png"] forState:UIControlStateNormal];
    }
    else
    {
        buttonCurrentStatus = NO;
        [self.delBtn setImage:[UIImage imageNamed:@"selection.png"] forState:UIControlStateNormal];
    }

    if ([self.delegate respondsToSelector:(customCelldelBtnPressed:)]) {
        [self.delegate customCelldelBtnPressed:self];
    }
}

//当然,您将需要实际创建委托或协议,并在视图控制器上实现它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM