2014-11-10 6 views
1

Я работаю над проектом iOS с xcode 5. Мне нужно было отобразить таблицу опций во всплывающем окне, поэтому я использовал представление контейнера и назвал его всплывающим через segue , Теперь проблема в том, что я хочу закрыть (а не просто исчезнуть) представление контейнера, как только я выберу строку внутри него. Пожалуйста, помогите мне, как этого достичь. Спасибо заранее.Как закрыть вид контейнера

+0

Можете ли вы разместить код? Чтобы закрыть окно контейнера, вы просто не удаляете его из супервизора? Как '[containerView removeFromSuperview]' – rfj001

+0

@ rfj001, какой код кода ожидает от меня? позвольте мне объяснить вам подробно: [Пожалуйста, исправьте меня, если я ошибаюсь] Я использую метод делегата, чтобы получить значение из представления контейнера в основное представление. Я отлаживал и выяснял, что реализация делегат вызывается в то время, когда основное представление вот-вот закончится, что дало мне интуицию, что, если я смогу закончить контейнерный просмотр, то при простом касании он будет вызываться в ожидаемое время. И я также смог бы закрыть всплывающее окно (это одно из моих требований. – User6391

+0

Я не использую xib-файл, поэтому, если вы можете дать мне знать, что такое синтаксис для добавления представления контейнера для просмотра без использования xib или nib, которые будут от вас видны – User6391

ответ

0

Наконец-то я нашел решение, это не выполнимое решение, но спасло меня от внесения серьезных изменений в мой проект. То, что я сделал это -

Я использовал разматывание SEGUE передать обратно значение от дочернего всплывающего контейнера к главному controller.For этого я представил два метода первых один был: prepareForSegue метода с точки зрения контейнера контроллер-

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
if([[segue identifier] isEqualToString:@"CommentOptionToComments"]) 
{ 

    APMCommentsViewController *objCommentController=(APMCommentsViewController *)segue.destinationViewController; 
    for(APMOption *obj in self.optionList) 
    { 
     if(obj.IsAnswer) 
     { 
      NSString *dataToPassBack=[NSString stringWithFormat:@"%d",obj.Number]; 
      self.passBackToParent=dataToPassBack; 
     } 
    } 
    NSLog(@"Return to parent"); 
} 
} 

еще один был метод unwindSegue в ParentViewController -

-(IBAction)unwindToList:(UIStoryboardSegue *)segue 
{ 
    //get the value from the segue and use it as per your requirement 
    APMCommentsOptionViewController *source=[segue sourceViewController]; 
    self.lblHiddenResponse.text=source.passBackToParent; 
} 

, но не забудьте объявить разматывания SEGUE в файле ParentViewController.h.

Теперь то, что я подключен мой прототип ячейка для размотки Segue в раскадровке и дал unwindsegue имя идентификатора (присутствует в сервисной области)

Но проблема заключалась в том, что разматывает переход был вызван перед didSelectRowAtIndexPath было вызванный в результате, хотя всплывающее окно могло закрыть его, но не могло отправить желаемое значение в ParentViewController. Для этого я это я просто назвал prepareForSegue снова в методе didSelectRowAtIndexPath, с синтаксисом, такие как -

[self performSegueWithIdentifier:@"CommentOptionToComments" sender:self]; 

Как я сказал, его не допустимое решение, но это, наконец, решить мою проблему, но это было бы проще, если бы Я бы использовал UIPopOverController.

0

Использование всплывающего окна вместо UIAlertView является рекомендуемым подходом. Но если требование требует использования всплывающего окна, вы можете просто показать/скрыть представление контроллера контейнера!

+0

hi @thatzprem Я не просто хочу скрыть или показать представление контейнера. Я хочу закончить его и вернуть элемент управления обратно в супервизор. – User6391

+0

Контейнерный вид - это не что иное, как контроллер представления снова Как насчет того, чтобы вы представили его модельно и отклонили контроллер представления модели. – thatzprem

+0

не могли бы вы уточнить, вы просите меня закрыть вид контейнера – User6391

Смежные вопросы