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