Какая польза от removeFromSuperView в iphone? - PullRequest
2 голосов
/ 07 октября 2010

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

Код ...

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

Заранее спасибо

Ответы [ 4 ]

11 голосов
/ 07 октября 2010

Вы должны знать, что в iOS вы манипулируете «представлениями».Представления - это части пользовательского интерфейса (изображения, метки, входные данные и т. Д.) Или содержащий слой.

В начале запуска вы ДОЛЖНЫ добавить вид в окно.Затем вы можете добавить добавить столько просмотров, сколько хотите на вашем представлении.

Если добавить представление B к представлению A. И представление A к окну.

Семантика:

  • Представление A является суперпредставлением B
  • Представление B является подпредставлением A
  • Представление A является подпредставлением окна
  • Окно является суперпредставлением представления A

    Поэтому, если вы вызываете removeFromSuperview на B, вы удаляете B, чтобы быть на A (и отображать).

Обратите внимание:

Когдавы добавляете подпредставление (addSubview :), при добавлении представления выполняется сохранение.

Когда вы удаляете представление (removeFromSuperview: или removeSubviewAtIndex :), для удаленного представления выполняется выпуск.

Чтобы ответить на ваш первоначальный вопрос

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

Выполните метод removeFromSuperview для каждого подпредставления cell.contentView.Таким образом, старые виды удаляются с экрана, но не обязательно освобождаются (они освобождаются, поэтому сохраняйте счет - 1).

0 голосов
/ 07 октября 2010

Он просто удаляет все подпредставления из cell.contentView.

0 голосов
/ 07 октября 2010

Каждый класс или подкласс UIView может поддерживать свои иерархии представлений с помощью addSubView:, и эти коды будут удалять все подпредставления из cell.contentView.

Но экземпляры UITableViewCell часто используются dequeueReusableWithIdentifier: . Эти коды удаляют все его подпредставления, поэтому, если его необходимо использовать повторно, он должен заново создать все свои подпредставления.

0 голосов
/ 07 октября 2010

Тогда все просто

Каждый UIView внутри "cell.contentView.subviews" (поэтому подпредставления cell.contentView) удаляются.

Он удалит их из суперпредставления, ивероятно, вызовите метод dealloc, если retainCount равен 0.

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