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

Как удалить конкретное подвью?

Я добавил subview (ViewController) в свой ViewController:

Location *location = [[Location alloc] initWithNibName:@"Location" bundle:[NSBundle mainBundle]];
[self.subView addSubview:location.view];

Как я могу удалить этот под просмотр?

Я знаю, что для удаления всех подзапросов есть:

for (UIView *subview in [self.view subviews]) {

  [subview removeFromSuperview];

}
4b9b3361

Ответ 1

Быстрая и грязная:. Дайте вашему тегу просмотр, чтобы впоследствии его определить:

Location *location = [[Location alloc] initWithNibName:@"Location" bundle:[NSBundle mainBundle]];
UIView *viewToAdd = location.view;
viewToAdd.tag = 17; //you can use any number you like
[self.view addSubview:viewToAdd];

Затем, чтобы удалить:

UIView *viewToRemove = [self.view viewWithTag:17];
[viewToRemove removeFromSuperview];

A чище, быстрее, проще читать и поддерживать альтернативу было бы создание переменной или свойства для доступа к представлению:

В интерфейсе:

@property (nonatomic, weak) UIView *locationView;

В реализации:

Location *location = [[Location alloc] initWithNibName:@"Location" bundle:[NSBundle mainBundle]];
UIView *viewToAdd = location.view;
self.locationView = viewToAdd;
[self.view addSubview:viewToAdd];

Затем, чтобы удалить:

[self.locationView removeFromSuperview];

Тем не менее, прислушайтесь к предупреждениям комментаторов о том, как играть с другими представлениями ViewControllers. Если вы хотите сделать это, прочитайте сдерживание ViewController.

Ответ 2

Создайте ivar, который либо даст вам ссылку на новый viewController, либо просто представление. Я пойду для viewController здесь

Добавить свойство и синтезировать его

// .h
@property (nonatomic, strong) Location *location;

// .m
@synthesize location = _location;

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

Location *location = [[Location alloc] initWithNibName:@"Location" bundle:[NSBundle mainBundle]];
self.location = location;

[self.subView addSubview:location.view];

Теперь позже, чтобы удалить его

[self.location.view removeFromSuperview];

Боковое примечание

Как правило, это болезненный путь добавления вида контроллера просмотра в вид другого. Для некоторого легкого чтения об этом см. Нарушение UIViewControllers

Ваше наименование Location, вероятно, не превосходно, может быть более уместным называть его чем-то вроде LocationViewController или аналогичным. Согласованное присвоение имен таким образом позволяет любому другому (или будущему вам) легко читать и понимать, что это viewController, не открывая заголовок.

Ответ 3

Вы можете просто установить уникальный тег для своего представления, которое идентифицирует его. И затем, когда вы хотите удалить его. Используйте метод viewWithTag:(NSInteger)tag, чтобы вернуть его и удалить только этот.

Location *location = [[Location alloc] initWithNibName:@"Location" bundle:[NSBundle mainBundle]];
location.tag = 8001; // 8001 is an exemple
[self.subView addSubview:location.view];

И затем

UIView * v = [self.subView viewWithTag:8001];
if (nil != v) {
    [v removeFromSuperview];
}