我想将一个UIViewController类作为子视图添加到现有的类中,所以我使用了以下代码。
myEventsView = [[EventNameViewController alloc]initWithNibName:@"EventNameViewController" bundle:nil];
[myEventsView.view setFrame:CGRectMake(0, 39, 320, 400)];
[self.view addSubview:myEventsView.view];它被成功添加,但问题出在按钮操作上,那些必须导航到其他视图控制器的操作不起作用。那些action方法被调用了,但是action没有执行,不知道为什么,请对上面的操作进行指导。
提前谢谢。
发布于 2013-05-02 16:25:18
试一试
myEventsView = [[EventNameViewController alloc]initWithNibName:@"EventNameViewController" bundle:nil];
[myEventsView.view setFrame:CGRectMake(0, 39, 320, 400)];
[myEventsView willMoveToParentViewController:self];
[self.view addSubview:myEventsView.view];
[self addChildViewController:myEventsView];
[myEventsView didMoveToParentViewController:self];发布于 2013-05-02 16:07:12
从docs
您创建的每个自定义视图控制器对象都负责管理单个视图层次结构中的所有视图。
您要做的是将一个视图控制器的视图添加为另一个视图控制器视图的子视图,从而混合两个视图层次结构。这会给你带来你已经经历过的问题。看看Carbon Emitter的Abusing UIViewCtrollers文章,它给出了一个彻底的解释和一个替代方案。
更新
正如上面的正确答案所建议的,有一种方法可以让一个UIViewController充当另一个容器。从Implementing a Container View Controller (UIViewController类引用):
自定义UIViewController子类也可以充当容器视图控制器。容器视图控制器管理它拥有的其他视图控制器(也称为它的子视图控制器)的内容表示。子视图可以按原样表示,也可以与容器视图控制器拥有的视图结合使用。
但是,这是iOS >= 5的一个特性,所以对于运行iOS版本低于5的应用程序,我的答案仍然是正确的。
发布于 2013-05-02 16:29:19
曼肯是对的。您不能将myEventsView.view作为子视图添加到self.view,因为myEventsView.view由其自己的视图控制器控制。
您可能只想添加一个新视图(即,而不是由另一个视图控制器控制的)作为self.view的子视图。那么,为什么不在没有新的视图控制器的情况下实例化这样的视图呢?
https://stackoverflow.com/questions/16333002
复制相似问题