从 UIView 子类访问 UINavigationController

Posted

技术标签:

【中文标题】从 UIView 子类访问 UINavigationController【英文标题】:Access UINavigationController from UIView Subclass 【发布时间】:2012-12-19 21:52:34 【问题描述】:

我有一个 UIScrollView 的子类。这个自定义子类有一个方法应该初始化新 UINavigationController 的打开。我知道子类不处理这种类型的方法,但我将如何以理想的方式处理这种情况?

【问题讨论】:

【参考方案1】:

我认为处理这个问题的理想方法是为您的子类UIScrollView 声明一个自定义委托协议方法。然后,您将设置您的UIViewController,我假设它是自定义滚动视图的父级,当它拦截此委托回调时,只需执行一个简单的操作:

[self.navigationController popViewControllerAnimated:YES];

【讨论】:

所以,一旦我在我的子类中创建了一个委托,我就必须设置 UIViewController,然后在需要时弹出视图控制器。但是我将如何为这个委托设置 UIViewController 呢?另外,使用委托而不是在类中设置它有什么好处? 我想我描述了我认为理想的方式,但不是唯一的方式。您也可以在自定义 scrollView 中创建一个属性,该属性将作为对拥有 viewcontroller 的引用并以这种方式弹出。我描述的委托方法最终会创建一个更干净、更可重用的元素。 我想试试代理。抱歉坚持不懈,但它究竟如何更清洁和更可重用?只是想了解。 所以它真的是关于创建你的自定义类来充当它自己的单元。弹出拥有视图控制器的行为适合这种情况,但也许还有另一种情况,您想做一些不同的事情。 它应该由拥有的视图控制器决定如何做出反应,因此通过创建自定义委托,您可以让自定义滚动视图简单地通知其父级需要执行操作,并且视图控制器会拦截并执行会怎样。

以上是关于从 UIView 子类访问 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章

在视图控制器中访问 UIView 子类

从 ViewController 访问 drawRect?

从 xib 加载子类时如何设置子类 UIView 属性的值

从 UIView 子类创建 CGImage

使用委托从 UIView 子类向 UIViewController 发送数据

如何从 Swift 中的 ViewController 获取 UIView 子类实例