Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从嵌入式容器视图中引用视图控制器的标题';你的观点是什么?_Ios_Objective C_Title_Uicontainerview - Fatal编程技术网

Ios 如何从嵌入式容器视图中引用视图控制器的标题';你的观点是什么?

Ios 如何从嵌入式容器视图中引用视图控制器的标题';你的观点是什么?,ios,objective-c,title,uicontainerview,Ios,Objective C,Title,Uicontainerview,我有一个UIViewController(我们称之为“EditViewController”),上面有一个容器视图(称之为“ContainerView”),我在其中切换各种子视图(称之为我最关心的“EditDetailsView”) 从EditDetailsView中,我需要更改EditViewController导航栏中的标题。我似乎不知道如何引用它 从EditViewController内部,我可以简单地做出如下声明: self.title = @"Some new title"; 而且变

我有一个UIViewController(我们称之为“EditViewController”),上面有一个容器视图(称之为“ContainerView”),我在其中切换各种子视图(称之为我最关心的“EditDetailsView”)

从EditDetailsView中,我需要更改EditViewController导航栏中的标题。我似乎不知道如何引用它

从EditViewController内部,我可以简单地做出如下声明:

self.title = @"Some new title";
而且变化很好

但从EditDetailsView视图(当前是ContainerView的子视图)来看,似乎什么都不起作用:

self.title=
。。。这显然是错误的

super.title=
。。。不起作用,而且似乎是错的

super.super.title=
。。。错误,因为在UIViewController上找不到super属性

有人能告诉我如何引用标题吗?我有点迷路了


谢谢

虽然可以通过
parentViewController
链进行挖掘,但它容易出错,不值得推荐。这被认为是一个糟糕的设计。想象一下,您以某种方式设置了视图控制器层次结构,但几个月后对其进行了一些更改,现在有了更深一层。或者,您希望在几个不同的场景中使用相同的视图控制器。更好的设计是使用委托将新标题传递给容器视图控制器。使用设置标题的方法创建委托协议


-(void)childViewController:(childViewController*)cvc didChangeToTitle:(NSString*)标题

我知道这是一个旧线程,但如果其他人需要它:为了避免使用委托编写样板代码,避免深入到
parentViewController
,我采用了另一种方法

我从父视图中引用了子视图控制器,并获得了它们的标题。所以无论你给哪个孩子看,你都会得到正确的标题

这是在Swift 3中

所以,基本上,这是你的父母:

class EditViewController: UIViewController {
    override func viewDidLoad() {
        if let child = self.childViewControllers.first {
            self.title = child.title
        }
    }
}
这是你的孩子:

class ContainerView: UIViewController {
    override func viewDidLoad() {
        self.title = "Sbrubbles"
    }
}
如果您熟悉反应式编程,另一个避免委托产生过多代码的好方法是使用RxSwift