Ситуация, когда каждый раз добавляется пользовательская кнопка в ряд

Задача:

  • Добавить пользовательскую кнопку под названием Delete в ряд всякий раз, когда он выбрал
  • И удаляйте его всякий раз, когда изменяется выборка ячеек, и так далее добавляйте "Удалить" к последнему выбору

    (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{
        self.myIndexPath=indexPath;
        UIButton *btnCustomDelete=[[UIButton alloc] initWithFrame:CGRectMake(260, 10, 60, 7)];
        [btnCustomDelete setTitle:@"Delete" forState:UIControlStateNormal];
        [tblCellForContactTable.contentView addSubview: btnCustomDelete];  //I think correction wants here  
    
        [btnCustomDelete addTarget:self action:@selector(actionCustomDelete:)  forControlEvents:UIControlEventTouchUpInside];
    }
    
    -(IBAction) actionCustomDelete:(id)sender{
        [arrForMyContacts removeObject:[arrForMyContacts objectAtIndex:myIndexPath.row]];
        [tblForContacts reloadData];
    }
    

Но, это не сработало все время.

1 ответ

Решение

Вы правы. Вы должны добавить кнопку в качестве подпредставления к вашей фактической UITableViewCell объект, которого вы можете достичь с помощью tableView:cellForRowAtIndexPath: метод источника данных.

Таким образом, ваша реализация может быть что-то вроде (после создания вашего btnCustomDelete):

UITableViewCell * myCell = [tableView cellForRowAtIndexPath:indexPath]
[myCell.contentView addSubview:btnCustomDelete];

Пожалуйста, продолжайте читать.

Ваша реализация не является здоровым решением для удаления строки из таблицы. Вы можете легко удалить действие с помощью некоторых UITableView методы источника данных и делегата, без добавления пользовательской кнопки, как показано ниже:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleDelete;
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [arrForMyContacts removeObjectAtIndex:indexPath.row];
    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
Другие вопросы по тегам