从 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 水平滚动