удалить подпредставления из contentView UITableViewCell (сбросить UITableView) - PullRequest
12 голосов
/ 21 сентября 2010

Есть идеи, как сбросить UITableView?

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

Ответы [ 8 ]

37 голосов
/ 13 августа 2011

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

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

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

[[cell.contentView viewWithTag:MY_CUSTOM_TAG]removeFromSuperview] ;
25 голосов
/ 21 сентября 2010

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

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

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

16 голосов
/ 06 октября 2011

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

[[scrollView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
2 голосов
/ 21 июня 2017

для Swift 3.1

        let theSubviews: Array = (cell?.contentView.subviews)!
        for view in theSubviews
        {
            view.removeFromSuperview()
        }
2 голосов
/ 01 апреля 2017

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

Если вы создадите подкласс 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. Надеюсь, это кому-нибудь поможет.:)

2 голосов
/ 16 апреля 2013

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

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

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

0 голосов
/ 08 июня 2019
for subview in cell.contentView.subviews {
    subview.removeFromSuperview()
}
0 голосов
/ 11 апреля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...