通过 UIScrollView 推送 ViewController

Posted

技术标签:

【中文标题】通过 UIScrollView 推送 ViewController【英文标题】:Pushing a ViewController Through a UIScrollView 【发布时间】:2016-06-11 22:54:48 【问题描述】:

我有一个具有某些视图和按钮的自定义 uiscrollview 类。当我在这个自定义滚动视图中按下一个按钮时,我想展示一个新的视图控制器。由于此滚动视图位于视图控制器内部,并且自定义类无权像导航控制器一样推送视图控制器,我如何通过此 uiscrollview 类推送新的视图控制器而不会引发错误?每当我在方法中创建一个新的导航控制器和视图控制器的实例时,我想要在按下按钮时使用该视图控制器,并呈现该视图控制器,我会收到一个错误。此外,所有这些都是程序化和动态的,而不是故事板。谢谢。

【问题讨论】:

【参考方案1】:

scrollView 必须在 viewController 中。

完成您的场景的最佳方法是将包含滚动条的 viewController 放在 navigationController 中,然后您可以推送到您想要的任何位置。

希望对你有帮助

【讨论】:

在控制器本身中初始化滚动条的按钮目标,它应该可以工作。 我做到了,这不是问题。 你没听懂我的意思。您无法从自定义视图导航。您必须从 UIViewController (包含滚动条)执行此操作。然后您可以将 self.navigationController 推送到第二个控制器。您的按钮的实现必须在第一个控制器中。 哦,好吧。天哪,我以为我可以解决这个问题,但我想不是。谢谢。【参考方案2】:

您可以尝试通过情节提要或直接从类中实例化 viewController,然后像这样从源 UIViewController 将其呈现为模态视图控制器

presentViewController:animated:

这可能会导致动画问题,可以通过实现自己的动画来解决

【讨论】:

我有一个包含自定义滚动视图的视图控制器。该滚动视图是通过单独的类定制的。在那个类中,我需要将另一个 viewconrtoller 推到屏幕上。问题是我不能直接对主导航控制器进行操作,我需要通过自定义滚动视图类推送新的视图控制器。 如果您的滚动视图在您的 UIViewController 上,您可以尝试访问 UIViewController 作为超级视图属性,然后推送新的 UIViewController。你会尝试这样做吗? 试试这样的 Reference Image:这张图片显示我的 schedulescrollview 与我的sportsviewcontroller 是分开的,它处理所有的scrollviews。当按下按钮时,nslog 显示按下的位置是我调用操作的位置,但我不知道如何在不引发错误的情况下执行此操作。 获取 self.superview,将其转换为 UIViewController,然后获取导航 UIViewController,实例化新的并推送它

以上是关于通过 UIScrollView 推送 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 内的 UIView 上的 UIButton

UIScrollView 对象通过引用传递,不被返回

UINavigationController 推送和弹出后 UIScrollView 子跳转

需要帮助在故事板上的 UIScrollView / UIPageControl 中推送视图

从嵌入在 UIScrollView 中的表中推送视图控制器

UIScrollview 在向下滚动并推送新的视图控制器后向上移动内容