直接从主 ViewController 加载另一个 UIView
Posted
技术标签:
【中文标题】直接从主 ViewController 加载另一个 UIView【英文标题】:Loading another UIView directly from the main ViewController 【发布时间】:2011-11-29 23:13:05 【问题描述】:我正在创建一个应用程序。在主 ViewController 中,我创建了菜单。但我希望在菜单可见之前出现一个登录屏幕(UIView)。
但由于菜单在我运行应用程序后立即加载,因此我决定创建另一个 UIView 控制器并将其加载到主 ViewController 之上。
因此,在我的主 ViewController viewDidLoad 的末尾,我添加了以下代码以在该视图之上打开登录视图
LoginPageView *loginPageView = [[LoginPageView alloc] initWithNibName:@"LoginPageView" bundle:nil];
loginPageView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:loginPageView animated:YES];
据我所知,该代码的目的是呈现另一个视图,但不幸的是登录视图没有出现。只有主 ViewController 加载。 任何人都可以帮助我吗?你知道我到底想要什么吗?
非常感谢
【问题讨论】:
【参考方案1】:在viewDidLoad
方法中,视图存在,但不能保证视图已经是应用程序视图层次结构的一部分。事实上,几乎没有。
您可以尝试在viewWillAppear:
或viewDidAppear:
中获取该代码。
【讨论】:
你的方式很好,但仅在 ViewDidAppear 中,因此会在瞬间显示菜单。有更好的方法吗?或者我必须使用主 ViewController 作为登录屏幕并使用第二个 ViewController 作为菜单? 快速修复:将所有子视图设置为隐藏,直到viewDidAppear:
发生。或者,如果您不为模态转换设置动画,但我不确定。【参考方案2】:
制作一个 UINavigationController。将其用作窗口的根视图控制器。将 UINavigationController 设置为不显示导航栏。
将导航控制器的子视图控制器设置为您的登录视图控制器。
当用户登录成功后,创建你的主视图控制器并推送它,如下所示:
MainViewController *mainVC = [[MainViewController alloc] initWithWhatever...];
[self.navigationController pushViewController:mainVC animated:YES];
当用户注销时,您可以这样做以返回登录 VC:
[self.navigationController popViewControllerAnimated:YES];
【讨论】:
以上是关于直接从主 ViewController 加载另一个 UIView的主要内容,如果未能解决你的问题,请参考以下文章
从另一个 ViewController 重新加载 UIPickerView 的数据
如何在 ipad 的另一个 ViewController 中重新加载 rootViewController
SwinjectStoryboard - 是不是可以加载/注入其 ViewController 存在于另一个项目的不同框架中的故事板?