调用另一个视图控制器的func来控制alpha会返回nil错误

时间:2018-07-06 22:27:29

标签: ios swift uiviewcontroller parent uicontainerview

我有一个(父)视图控制器,其中包含容器视图。启动应用程序时,它首先进入父级,然后进入容器视图。在容器视图控制器中,我尝试使用诸如parentName()。changeAlpha()之类的东西-这是一个属于父级的函数...应更改父级视图上标签的alpha。

但是,当我尝试调用该函数时,它总是给我一个零错误。请记住,首先加载父视图。

层次结构:(我在括号中有每个控制器的Xcode名称,后跟属于它的文件名)

标签栏控制器(TabBarController)(有3个标签)

Tab1 (homeScreenContainer)-包含其中包含uiviewcontainer的视图控制器。另外,包含我要调用的功能。

容器视图的所有部分:

  • 页面视图控制器(共2页,下面是第一页)(RootPageViewController)

    • 视图控制器(ViewController)-这是我试图调用该函数的地方。

Tab2(麻醉剂)

Tab3(麻醉剂)

此外,代码和情节提要中的唯一继承都是uiviewcontainer(并且不涉及代码继承)。

1 个答案:

答案 0 :(得分:0)

这样做

parentName().changeAlpha()

创建另一个父对象而不是所示对象,它给出nil错误,因为应该从Stroyboard / Xib加载VC,而不是像这样parentName(),除非它是通过编程方式创建的,真正需要的是查询窗口,假设父窗口是该窗口的rootVC,您可以这样做

if let tab = UIApplication.shared.keyWindow?.rootViewController as? UITabBarController {
      print("Inside Tap")
   if let realParent = tab.viewControllers![0] as? ParentVC {
     print("Inside Parent")
     realParent.changeAlpha()
   }
}