Подтвердить что ты не робот

Удалите subviews из contentView UITableViewCell (reset UITableView)

Любая идея о том, как reset a UITableView?

Я хочу отобразить новый набор данных нажатием кнопки, а также удалить все подпункты из ячейки contentView и обновить их с помощью нового набора subviews. Я попробовал [tableView reloadData], но данные действительно обновились, но добавленные в contentView ячейки ранее сохранялись.

4b9b3361

Ответ 1

Еще лучше, когда вы создаете ячейку:

#define MY_CUSTOM_TAG 1234
mySubview.tag = MY_CUSTOM_TAG;
[cell.contentView addSubview:mySubview] ;

И позже, когда вам нужно его удалить:

[[cell.contentView viewWithTag:MY_CUSTOM_TAG]removeFromSuperview] ;

Ответ 2

Я получил ответ:)

if ([cell.contentView subviews]) {
    for (UIView *subview in [cell.contentView subviews]) {
        [subview removeFromSuperview];
    }
}

Этот фрагмент кода проверяет, имеет ли представление содержимого ячейки какие-либо подзаголовки.
Если они есть, они удаляются, поскольку цикл for повторяется!

Ответ 3

Вместо того, чтобы повторять все подзаголовки (самостоятельно), чтобы удалить их, вы можете просто сделать это,

[[scrollView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

Ответ 4

Если вы хотите удалить все подпрограммы UITableViewCell, вы можете использовать этот код:

NSArray* subviews = [cell.contentView subviews];
for (UIView* subview in subviews) {
    [subview removeFromSuperview];
}

Используя код @leftspin

Ответ 5

Я знаю, что этот вопрос старый, но я нашел проблему с решением, если вы удалите одно подвью из одной ячейки прототипа, это представление будет удалено из всех повторно используемых ячеек, это создаст нулевой указатель в следующей ячейке, будут повторно использованы.

Если вы подклассифицируете UITableViewCell и удалите подпрограмму оттуда, вам сначала нужно выполнить эту проверку:

if (mySubView != nil ) {
        mySubView.removeFromSuperview()
    }

Это также будет работать внутри вашего cellForRow при методе indexPath

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyCustomCell

    if (cell.mySubView != nil) {
       cell.mySubView.removeFromSuperview()
     }
    return cell
}

В этом случае вы избегаете нулевого указателя, код для быстрого 3. Надейтесь, что это поможет кому-то.:)

Ответ 6

Для Swift 3.1

        let theSubviews: Array = (cell?.contentView.subviews)!
        for view in theSubviews
        {
            view.removeFromSuperview()
        }

Ответ 7

cell.contentView.subviews.forEach({$ 0.removeFromSuperview()})

Ответ 8

for subview in cell.contentView.subviews {
    subview.removeFromSuperview()
}