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

Как удалить подпункты

Я добавил UIButton, UITextView как подпункт к моему представлению, программно.

notesDescriptionView = [[UIView alloc]initWithFrame:CGRectMake(0,0,320,460)];
notesDescriptionView.backgroundColor=[UIColor redColor];
[self.view addSubview:notesDescriptionView];

textView = [[UITextView alloc] initWithFrame:CGRectMake(0,0,320,420)]; 
[self.view addSubview:textView]; 
printf("\n description  button \n");

button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button
  addTarget:self action:@selector(cancel:)
  forControlEvents:UIControlEventTouchDown];
[button setTitle:@"OK" forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 420.0, 160.0, 40.0);
[self.view addSubview:button];

здесь, если мы нажмем кнопку, мне нужно удалить все под-представления,

Я пытаюсь

[self.view removeFromSuperView]

но его не работает

любая помощь.

4b9b3361

Ответ 1

Я предполагаю, что вы вызываете [self.view removeFromSuperView] из метода в том же классе, что и приведенный выше фрагмент.

В этом случае [self.view removeFromSuperView] удаляет self.view из собственного супервизора, но self - это объект, с представлением которого вы хотите удалить subviews. Если вы хотите удалить все дочерние объекты объекта, вам нужно сделать это вместо:

[notesDescriptionView removeFromSuperview];
[button.view removeFromSuperview];
[textView removeFromSuperview];

Возможно, вы захотите сохранить эти subviews в NSArray и перебрать этот массив, вызывающий removeFromSuperview для каждого элемента в этом массиве.

Ответ 2

чтобы удалить все просмотры, добавленные в представление

используйте следующий код

 for (UIView *view in [self.view subviews]) 
  {
     [view removeFromSuperview];
  }

Ответ 3

Я всегда удивлялся, что Objective C API не имеет простого метода для удаления всех подвариантов из UIView. (Flash API делает, и вы в конечном итоге нуждаетесь в нем совсем немного.)

Anwyay, это маленький вспомогательный метод, который я использую для этого:

- (void)removeAllSubviewsFromUIView:(UIView *)parentView
{
  for (id child in [parentView subviews])
  {
    if ([child isMemberOfClass:[UIView class]])
    {
      [child removeFromSuperview];
    }
  }
}

EDIT: здесь вы найдете более элегантное решение: Каков наилучший способ удалить все подзаголовки из вас self.view?

Используем это теперь следующим образом:

  // Make sure the background and foreground views are empty:
  [self.backgroundContentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
  [self.foregroundContentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

Мне нравится, что лучше...

Эрик