我通过AppDelegate.m文件中的以下代码创建了一个带子视图的视图
//in AppDelegate.m file
//Initializeing the navcon, photoviewtable and default loading page
self.navcon = [[UINavigationController alloc]init];
self.photoViewTable = [[PhotoTableViewController alloc]init];
self.loadingPage = [[LoadingPageViewController alloc]init];
[self.photoViewTable.view addSubview:loadingPage.view];
[navcon pushViewController:photoViewTable animated:NO];
[self.window addSubview:navcon.view];
当我在LoadingPage.view
时,如何访问子视图PhotoTableViewController.view
?
答案 0 :(得分:5)
使用tag
的{{1}}属性将UIView
放入loadingPage.view
。
PhotoTableViewController
在loadingPage.view.tag = 111;
[self.photoViewTable.view addSubview:loadingPage.view];
课程中。
photoViewTable
答案 1 :(得分:4)
除非您通过引用或标记进行标记,否则您应该能够这样做。
for ( UIView *subview in self.view.subviews ) {
if ( [[subview nextResponder] isMemberOfClass:[LoadingPageViewController class]] ) {
// 'subview' is your view
}
}
答案 2 :(得分:3)
您尝试同时使用两个视图控制器:
self.photoViewTable = [[PhotoTableViewController alloc]init];
self.loadingPage = [[LoadingPageViewController alloc]init];
[self.photoViewTable.view addSubview:loadingPage.view];
如果LoadingPageViewController是UIViewController子类,则上面的代码不正确。除了像UINavigationViewController这样的“容器”视图控制器之外,在给定时间应该只有一个视图控制器处于活动状态。请参阅my answer中的this SO thread,了解有关情况的更完整说明。简而言之,UIViewController旨在管理整个屏幕的内容,而您从UIViewController获得的大部分功能都与管理这些屏幕有关。
要更直接地回答您的问题,让我们忽略多个UIViewController问题,只看每个对象的责任。由于您已经创建了一个对象(loadingPage)来管理一组视图,因此photoViewTable应该让loadingPage完成它的工作并避免尝试直接操作loadingPage的视图。为PhotoTableViewController提供一个指向LoadingPageViewController的指针,以便photoViewTable可以向loadingPage发送消息。