Как удалить все, что видно в текущем представлении, а затем отобразить другое представление?

#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. Я получил массив, но не могу выполнить цикл по нему, чтобы удалить нужные. Приведенный выше ответ позволяет мне удалить все и отобразить мой контент. Но теперь я хочу удалить только определенные и сохранить остальные. Как мне это сделать??