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

问题描述 投票:0回答:1

我有一个(父)视图控制器,其中有一个容器视图。当应用程序启动时,它首先进入父级,然后进入容器视图。在容器视图控制器中,我尝试像parentName()。changeAlpha() - 这是一个属于父...的函数,它应该改变父视图上标签的alpha。

但是,一旦我尝试调用该函数,它就会一直给我一个nil错误。请记住父视图正在加载第一件事。

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

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

Tab1(homeScreenContainer) - 包含一个带有uiviewcontainer的视图控制器。还包含我试图调用的函数。

容器视图的所有部分:

  • 页面视图控制器(总共2页,第一页是下面的一页)(RootPageViewController) View controller(ViewController) - 这是我试图调用该函数的地方。

Tab2(不相关)

续(Aarlvenh)

此外,代码和故事板中唯一的继承只是uiviewcontainer(并且没有涉及代码继承)。

ios swift uiviewcontroller parent uicontainerview
1个回答
0
投票

这样做

parentName().changeAlpha()

创建除了显示的父对象之外的另一个父对象,并且它给出了nil错误,因为VC应该从Stroyboard / Xib加载而不是像这个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()
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.