从 UIScrollView 子视图呈现故事板 UIViewController

Posted

技术标签:

【中文标题】从 UIScrollView 子视图呈现故事板 UIViewController【英文标题】:present a storyboard UIViewController from a UIScrollView subview 【发布时间】:2017-01-06 16:57:49 【问题描述】:

我正在尝试从 UIScrollView 子视图呈现视图控制器。 我试过使用 AppDelegate window.rootViewController presentViewController: 但这给了我“视图不在层次结构中!”错误。 我想避免使用 addSubview ,因为这会破坏 MVC 并且似乎删除了控制器的功能(按钮停止工作)。 当我使用预期的 presentViewController 方法时,我得到“No visible @interface for “InititalScrollViewSubview”声明选择器“presentViewController:animated:completion:”,我认为这意味着我的 initialScrollViewSubview 正在尝试使用 presentViewController,但 presentViewController 必须来自UIViewController。UIScrollView 没有 presentViewController 方法。

我的代码是这样的:

-(void)setupTouchIDButtonTapped: (id)sender 

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"newViewController" bundle:nil];
    NewViewController *myNewViewController = [storyboard instantiateViewControllerWithIdentifier:@"myNewVC"];

//我尝试的第一件事:

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[delegate.window.rootViewController presentViewController:NewViewController animated:YES completion:nil];

//我尝试的第二件事

[self addSubview:NewViewController.view];

//我尝试的第三件事:

[self presentViewController:NewViewController animated:YES completion:nil];


InitialScrollViewSubview 必须保持原样。理想情况下,我会重构所有内容,因此 InitialScrollViewSubview 是另一个 UIViewController 但我为一家大公司工作,应用程序太大了:) 非常感谢任何建议!

谢谢!!

【问题讨论】:

【参考方案1】:

如果您尝试在滚动视图中“嵌入”视图控制器的视图,那么您不会显示视图控制器。您实例化它,然后将它的视图添加到视图层次结构中。

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"newViewController" bundle:nil];
    NewViewController *myNewViewController = [storyboard instantiateViewControllerWithIdentifier:@"myNewVC"];

[scrollView addSubview:NewViewController.view];

您还需要设置视图的大小/框架或设置自动布局约束,以便正确调整视图控制器的大小。

【讨论】:

谢谢!我试过了,使用 [self addSubview:NewViewController.vew];视图出现,但我所有的按钮都停止工作。这是因为它失去了“控制器”功能,因为它现在只是 scrollView 视图的一部分吗? 滚动视图可能是注册接收事件的主要视图,请尝试在 viewcontroller.view 上启用 userInteractionenabled。您也可以在这里尝试提示:***.com/questions/4629499/… 这可能是您需要的解决方案***.com/questions/16649639/…【参考方案2】:

试试这个

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"newViewController" bundle:nil];

NewViewController *myNewViewController = [storyboard instantiateViewControllerWithIdentifier:@"myNewVC"];

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

UINavigationController * rootNvc = delegate.window.rootViewController ;

[rootNvc pushViewController:NewViewController 动画:YES];

【讨论】:

以上是关于从 UIScrollView 子视图呈现故事板 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

通过故事板和自动布局完全使用 uiscrollview 水平滚动

快速从单独的视图控制器调用函数

使用故事板从应用程序委托呈现模态视图控制器

从应用程序委托中呈现故事板视图控制器?

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

用 UIScrollView 和故事板约束发疯