如何从 viewController 的视图中呈现 UIViewController
Posted
技术标签:
【中文标题】如何从 viewController 的视图中呈现 UIViewController【英文标题】:How to present UIViewController from viewController's view 【发布时间】:2017-11-10 22:49:49 【问题描述】:我在UIViewController
中使用UITableViewController
的视图,如下所示:
UITableViewController *tvc = [[UITableViewController alloc] init];
[self.view addSubview:tvc.view];
现在,在这个UITableViewController
中,我希望能够在必要时提供一个SFSafariViewController
。我写了下面的代码:
if (showLink)
SFSafariViewController *sfsvc = [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:@"https://www.google.com"]];
[self.presentingViewController.navigationController pushViewController:sfsvc animated:YES];
每当我运行此程序时,我都会在控制台中收到以下错误,但什么也没有发生:
[Warning] Attempting to load the view of a view controller while it is deallocating is not allowed and may result in undefined behavior (<SFSafariViewController: 0x7f8aef82a600>)
有什么办法可以解决这个问题吗?
【问题讨论】:
你为什么不直接使用UITableView
而不是破解UITableViewController
?你的问题是你的 safari 视图控制器是一个局部变量,一旦这个函数退出它就会被释放,大概是因为没有任何东西保留你的 tableviewcontroller
【参考方案1】:
在这种情况下,使用rootViewController
推送SFSafariViewController
是您的解决方案。在下面试试我的代码
if (showLink)
SFSafariViewController *sfsvc = [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:@"https://www.google.com"]];
UIViewController *rootViewController = UIApplication.sharedApplication.delegate.window;
[rootViewController.navigationController pushViewController:sfsvc animated:YES];
【讨论】:
以上是关于如何从 viewController 的视图中呈现 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章
iPhone,iOS 8:如何呈现比原始视图控制器更小的 ViewController?
swift3:如何将 xib 呈现给 viewcontroller
关闭从 UIDocumentInteractionController 打开的 iOS 邮件应用程序会删除 iOS7 中呈现的 ViewController 的视图