2014-01-03 3 views
0

У меня есть UITableView с CustomCell. Всякий раз, когда UITableView находится в режиме редактирования, у меня есть следующий код в CustomCell.Получить indexPath в режиме редактирования UITableView

- (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]; 
    } } 

Теперь, как я могу получить indexPath из CustomCell UITableview?

ответ

0

Вы можете использовать UITableView indexPathForCell:.

Очевидно, для этого вам понадобится ссылка на таблицу внутри класса ячеек. Если вы хотите сделать это свойством своей ячейки, обязательно сделайте это weak, чтобы избежать эталонного цикла.

0

Я нашел, что лучший способ сделать это - создать делегат/протокол на соте. Сделайте делегата 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]; 
    } 
} 

// конечно, вам нужно будет фактически создать делегат или протокол и реализовать его на контроллере представления.

Смежные вопросы