Удалите subviews из contentView UITableViewCell (reset UITableView)
Любая идея о том, как reset a UITableView
?
Я хочу отобразить новый набор данных нажатием кнопки, а также удалить все подпункты из ячейки contentView
и обновить их с помощью нового набора subviews. Я попробовал [tableView reloadData]
, но данные действительно обновились, но добавленные в contentView
ячейки ранее сохранялись.
Ответы
Ответ 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()
}