2013-05-14 6 views
2

Я пытаюсь добавить подзаголовок с помощью раскадровки. Он отображается правильно, но в подзаголовке нет кнопки (IBAction), которая работает правильно, даже с пустым кодом, приложение всегда сбой при нажатии.IBAction Subview с раскадровкой

TableViewController.m

... 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Load SubView  
    SubviewViewController *subview = [self.storyboard instantiateViewControllerWithIdentifier:@"SubviewViewController"]; 
    [self.view addSubview:subview.view]; 
} 
... 

SubviewViewController.m

- (IBAction)btnCloseSubview:(id)sender 
{ 
    // Crashes the app when clicked, even empty as it's. 
} 

ответ

5

Вы не должны просто добавить мнение другого контроллера представления на ваш взгляд, как это, он может получить вас в неприятности. Когда я это пробовал, он иногда работает, а иногда нет. Правильный путь также добавить контроллер в качестве контроллера зрения ребенка из TableViewController:

SubviewViewController *subview = [self.storyboard instantiateViewControllerWithIdentifier:@"SubviewViewController"]; 
[self addChildViewController: subview]; 
[subview didMoveToParentViewController:self]; 
[self.view addSubview:subview.view]; 

Вы, вероятно, нужно установить рамки зрения подвид, как хорошо (subview.view.frame = self.view.bounds если вы хотите, чтобы он был того же размера).

В качестве альтернативы вы можете создать представление, а не контроллер вида, в файле xib и добавить его в качестве подсмотра вашего представления. В этом случае вы должны установить владельца файла xib в TableViewController и поместить метод кнопки в TableViewController.

+0

Спасибо за ваш ответ, мой код теперь работает правильно! Я хотел бы спросить, полностью ли это решение, или если это лучший способ сделать это. –

+0

@LucianoNascimento, это правильный способ добавления контроллера детского представления в код. Вы не сказали, что вы пытаетесь сделать, но, так ли это лучший способ достичь своей цели, я не знаю. Вы могли бы добавить только представление, как я сказал, или вы могли бы представить SubviewViewController в качестве модального контроллера - все зависит от вашей цели. – rdelmar

+0

@ Luciano Nascimento: Если ваша проблема решена, я предлагаю вам принять ответ, установив галочку. –

2

Загляните в UIContainerView, он обрабатывает контроллеры подзадачи. Вам нужно будет обрабатывать собственное общение между родительскими и дочерними контроллерами представлений, но кроме этого он будет работать так, как вам нужно, для под-представления, если ваш подзадач имеет правильные выходные точки и действия, установленные в раскадровки с его контроллером.

Ищите больше in-depth information на представлениях контейнера.

+0

+1 для ссылки на документацию. Он очистил всю двусмысленность в моем сознании. –

+0

«Вам нужно будет обрабатывать собственное общение между родительскими и дочерними контроллерами представлений». Можете ли вы сказать мне, как это сделать? У меня возникла следующая проблема ... :(http://stackoverflow.com/questions/32361624/gesture-recognizer-and-ibaction-in-a-uiviewcontroller-child-embedded-in-anothe. Спасибо в любом случае – enagra

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