#iphone #uiview
#iPhone #uiview
Вопрос:
У меня есть экран, на котором я добавил разные компоненты, такие как кнопки, метки и т.д., С помощью разных шагов. Теперь после щелчка я хочу удалить все и отобразить другое представление. Вот некоторый код:
-(void)estimateButtons:(NSString *)text andFrameX:(int)x andFrameY:(int)y andFrameW:(int)w andFrameH:(int)h
{
estimate = [UIButton buttonWithType:UIButtonTypeRoundedRect];
estimate.frame =CGRectMake(x,y,w,h);
//[estimate setTitle:text forState:UIControlStateNormal];
UIImage * buttonImage = [UIImage imageNamed:@"button_green_estimate.png"];
UIImage * strechableButtonImage = [buttonImage stretchableImageWithLeftCapWidth:12 topCapHeight:0];
[estimate setBackgroundImage:strechableButtonImage forState:UIControlStateNormal];
[estimate addTarget:self action:@selector(estimateSelected:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:estimate];
}
-(void)estimateSelected:(UIButton *)b
{
[self.view removeFromSuperview];
graph = [[SFNDoorBarGraphVC alloc]initWithNibName:@"SFNDoorBarGraphVC" bundle:nil];
[graph.view setCenter:CGPointMake(350, 660)];
[self.view addSubview:graph.view];
}
С помощью этого кода он удаляет все, но не отображает содержимое моего нового представления, которое является графиком.
Ответ №1:
Проблема в строке:
[self.view removeFromSuperview];
итак, когда вы:
[self.view addSubview:graph.view];
графическое представление добавляется к представлению, которого нет в иерархии представлений.
попробуйте это:
NSArray *sViews = [self.view subviews];
[sViews makeObjectsPerformSelector:@selector(removeFromSuperview)];
РЕДАКТИРОВАТЬ: Добавление в соответствии с запросом в комментариях.
NSArray *sViews = [self.view subviews];
for (UIView *sv in sViews)
{
if (![sv isEqual:viewToSave])
{
[sv removeFromSuperview];
}
}
Комментарии:
1. Это сработало!!!! Большое спасибо. Есть ли способ сохранить представление от удаления, но не rest.
Ответ №2:
Получите подвиды вашего текущего контроллера представления, используя
[self.view subviews];
Это возвращает массив вложенных представлений. Вы можете перебирать их и для каждого представления вызывать:
[currView removeFromSuperview];
где currView будет ссылкой на вложенный просмотр по мере выполнения цикла.
Комментарии:
1. Не могли бы вы подробнее рассказать.
2. Также проблема заключается не в удалении, а в отображении нового представления.
3. Я получил массив, но не могу выполнить цикл по нему, чтобы удалить нужные. Приведенный выше ответ позволяет мне удалить все и отобразить мой контент. Но теперь я хочу удалить только определенные и сохранить остальные. Как мне это сделать??