Как удалить подпункты
Я добавил 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]
но его не работает
любая помощь.
Ответы
Ответ 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)];
Мне нравится, что лучше...
Эрик