2013-05-10 3 views
0

У меня есть приложение, основанное на контроллере tabBar. В определенном виде я хотел бы добавить распознавание жестов в swipe и заменить текущий вид другим (который не является частью массива tabBarController). Я пробовал:Обмен мнениями внутри контроллера табуляции

- (IBAction)swipeLeftDetected:(UIGestureRecognizer *)sender 
{ 
//Does not work 
UIViewController *DesiredViewController =[[UIViewController alloc] initWithNibName:@"DesiredViewController" bundle:nil]; 
DesiredViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
[self presentModalViewController:DesiredViewController animated:YES]; 

[self.view addSubview:DesiredViewController.view]; 
} 

но программа вылетает. Ошибка, которую я получаю, связана с SegmentedControl, которая присутствует в следующем представлении, но отсутствует в текущей. Представления независимо работают отлично!

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason:'[<UIViewController 0xa355fb0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key X_SegmentedControl.' 

Я не понимаю, что я делаю неправильно .. Я хочу поменять точку зрения полностью, а не положить друг на друга. Любой совет, пожалуйста? Спасибо

+0

http://stackoverflow.com/questions/16406892/nsunkownexception-this-class-is-not-key-value-coding-compliant-for-the-key-pie/16407010 # 16407010 – Peteee24

ответ

0

Проблема не в переходе.

Вы загружаете контроллер вида из NIB.

Контроллер зрения обычно подклассы, поэтому (при условии, что ваш СИБ настроен правильно, и у вас есть файл .h и .m реализации для вашего DesiredViewController подкласса), вы должны инициализировать так:

DesiredViewController *controllerInstance =[[DesiredViewController alloc] initWithNibName:@"DesiredViewController" bundle:nil]; 

Исключение происходит потому, что вы, вероятно, имеете сегментированный контроль внутри вашего подкласса контроллера вида, Xcode пытается связать этот элемент управления с выходом на контроллере представления, но эта розетка не существует (поскольку вы назначаете UIViewController, а не подкласс).

+0

Получил, спасибо. Теперь я понимаю механизм. Разве нет способа, по которому старое представление может быть полностью проигнорировано/удалено? Если новый пытается связать со старым, это очень рискованно. Это калькулятор, и бог знает, что еще может быть связано между ними! – jeddi

1

использовать вместо этого

-(IBAction)swipeLeftDetected:(UIGestureRecognizer *)sender 
{ 
    DesiredViewController *objView =[[DesiredViewController alloc]initWithNibName:@"DesiredViewController" bundle:nil]; 
    objView.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 
    [self presentModalViewController:objView animated:YES]; 
    [objView release]; // use release if using Non-ARC 
} 
+0

Отлично, он действительно работает, спасибо! Однако проблема заключается в том, что при появлении нового представления это находится поверх всего остального и даже поверх панели вкладок. Таким образом, панель вкладок становится непригодной .. Как я могу нажать ее за ней? – jeddi

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