2013-05-10 57 views
0

我有一个基于tabBar控制器的应用程序。在某个视图中,我想添加滑动手势识别并将当前视图与另一个视图(不是tabBarController数组的一部分)交换。我曾尝试过:交换tabview控制器内的视图

- (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 2013-05-10 08:45:58

回答

0

问题不在于转换。

您正在从NIB加载视图控制器。

视图控制器通常是子类,所以(假设你的笔尖配置正确,你有你的DesiredViewController子.h.m实现文件),你应该初始化是这样的:

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

唯一的例外是因为您的视图控制器子类中可能有一个分段控件,Xcode试图将此控件链接到视图控制器上的插座,但此插座不存在(因为您正在分配一个不是子类的UIViewController)。

+0

明白了,谢谢。我现在了解机制。是不是有一种方法可以完全忽略/删除旧视图?如果新的尝试与旧的链接,这是非常危险的。这是一个计算器程序,上帝知道还有什么可以成为两者之间的联系! – jeddi 2013-05-10 13:02:41

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 2013-05-10 12:59:33