Удалить подпункты с тегами безопасно - PullRequest
3 голосов
/ 26 октября 2011

Это не настоящая проблема, я хочу просто разъяснение.Я добавляю несколько подпредставлений в UIButton (каждая кнопка имеет тег), я знаю, что может быть 4 или 5 подпредставлений.Поэтому, когда я хочу удалить некоторые подпредставления (в данном случае, в частности, 4-е и 5-е):

int cnt=[[(UIView *)[self.scrollView viewWithTag:index] subviews] count];
  if (cnt==4) {
      [[[(UIView *)[self.scrollView viewWithTag:index] subviews] objectAtIndex:3] removeFromSuperview];
  }
  if (cnt==5) {
      [[[(UIView *)[self.scrollView viewWithTag:index] subviews] objectAtIndex:3] removeFromSuperview];
    //[[[(UIView *)[self.scrollView viewWithTag:index] subviews] objectAtIndex:4] removeFromSuperview]; <-- this crash
      [[[(UIView *)[self.scrollView viewWithTag:index] subviews] objectAtIndex:3] removeFromSuperview];

    }

Строка с комментариями не может быть выполнена, конечно, потому что не больше 5, но 4подвиды.Поэтому я должен удалить представление, указывающее дважды на один и тот же индекс.Я хотел бы знать, если это безопасный способ удалить их, и я хочу быть уверен, что последнее представление перемещается на одну позицию ниже в массиве [[self.scrollView viewWithTag:index] subviews].

Надеюсь, это понятно.Спасибо

Ответы [ 2 ]

8 голосов
/ 26 октября 2011

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

[[parentView viewWithTag:tag] removeFromSuperview];

Здесь вы просите дочернее представление удалить себя, а не просить родительское представление.чтобы удалить ребенка на основании предполагаемого порядка, который может быть неправильным.

4 голосов
/ 26 октября 2011

Я бы предпочел использовать что-то вроде этого:

for(int i=cnt-1;i>=3;i--)
{
  [[[(UIView *)[self.scrollView viewWithTag:index] subviews] objectAtIndex:i] removeFromSuperview];
}

Обычно, при удалении объектов из списков самый безопасный способ - начинать с конца.Таким образом, даже не имеет значения, если они будут реорганизованы.

...