在当前视图中访问子视图

6 浏览
0 Comments

在当前视图中访问子视图

我在AppDelegate.m文件中使用以下代码创建了一个带有子视图的视图:

//在AppDelegate.m文件中

//初始化导航控制器,照片视图表和默认加载页面

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];

当我在PhotoTableViewController.view中时,如何访问子视图LoadingPage.view?

0
0 Comments

问题出现的原因是在PhotoTableViewController中无法访问到loadingPage.view。解决方法是使用UIViewtag属性来获取loadingPage.view

首先,在PhotoTableViewController中将loadingPage.viewtag属性设置为111,并将其添加到self.photoViewTable.view中:

loadingPage.view.tag = 111;
[self.photoViewTable.view addSubview:loadingPage.view];

然后,在photoViewTable类中,使用viewWithTag:方法来获取带有tag为111的视图myLoadingPage

LoadingPageViewController*  myLoadingPage = (LoadingPageViewController*) [self.view viewWithTag:111];

0
0 Comments

问题的原因是尝试同时使用两个视图控制器。根据UIViewController的设计原则,除了像UINavigationViewController这样的“容器”视图控制器之外,同一时间只能有一个活动的视图控制器。因此,如果LoadingPageViewController是一个UIViewController的子类,上述代码是不正确的。

解决方法是让PhotoTableViewController委托LoadingPageViewController来管理它的视图,而不是直接操作loadingPage的视图。可以给PhotoTableViewController添加一个指向LoadingPageViewController的指针,这样photoViewTable就可以向loadingPage发送消息了。

另一种解决方法是去掉loadingPage,让PhotoTableViewController自己管理一个loading视图。根据你之前提到的PhotoTableViewController已经知道何时正在加载和何时不加载的情况,似乎它已经在做类似的工作了。但如果你不想这样做,可以给它一个指向loadingPage对象的指针,并告诉loadingPage何时开始或停止加载。这样loadingPage对象就可以管理视图了。无论如何,根据你的需求来决定采取哪种方法,但如果你使用控制器对象,应该让它控制它的视图,否则控制器的作用是什么呢?

你问我如何实现这样的方法,我尝试创建一个UIView *subview并将其添加到phototableviewcontroller.view,但是子视图似乎没有显示出来。不过,这是你所建议的方法吗?

0
0 Comments

问题出现的原因是没有明确标记或者使用标签,导致无法直接访问当前视图中的子视图。解决方法是使用循环遍历当前视图的所有子视图,然后通过判断子视图的nextResponder是否为指定的类来获取目标子视图。

具体的解决方法如下所示:

for (UIView *subview in self.view.subviews) {
    if ([[subview nextResponder] isMemberOfClass:[LoadingPageViewController class]]) {
        // 'subview' is your view
    }
}

以上代码中,首先通过for循环遍历当前视图(self.view)的所有子视图(subview),然后通过判断子视图的nextResponder是否为指定的类(LoadingPageViewController class)来确定目标子视图。如果判断成功,则可以通过'subview'来访问目标子视图。

这样,就解决了在当前视图中访问子视图的问题。

0