Ric*_*ich 1 iphone objective-c uiviewcontroller ipad ios
我正在将现有的Android应用程序移植到iOS,我在这种环境中缺乏经验.我到目前为止用于导航多个视图的示例都使用某种可视化用户控件来触发视图的加载和卸载(标签栏,导航栏).此应用程序的导航需要非常严格,不允许用户在三个视图之间自由移动.
该应用程序需要具有全屏幕初始视图,用户与之交互的主视图以及用于数据收集的第三个视图.应该出现启动画面,当点击启动图像时,应该将用户导航到主视图.主视图控制器中将有自定义逻辑,用于确定是否需要数据,它应该导航到数据收集视图.输入有效数据并且用户单击"确定"后,它应该导航回主视图.
到目前为止我所看到的是所有的视图都应该有一个关联的UIViewController类,这样做的简单方法是一次创建XIB和UIViewController类并将它们链接在一起(我有很多示例/书籍/教程,我可以参考那部分).我相信我读过的应用程序应该有一个根UIViewController,它可以处理加载其他人并在它们之间导航.
我的问题是:我应该从我用于加载其他视图的主视图控制器派生出什么类?如何将其连接到应用程序,以便它知道将其加载为主控制器?在应用程序中使用导航控制器并允许其他视图获取对它的引用的公认标准方法是什么?我的UIViewControllers是否应该拥有对其父控制器的引用,还是应该在需要时向UIApplication请求引用它?如何确保在用户导航时不会实例化视图及其控制器的额外副本?
听起来你可以用几个基本的电话来完成你需要的东西.以编程方式调用视图控制器:
- (void)showController {
MyViewController *myController = [[MyViewController alloc] initWithNibName:@"MyViewControllerXIB" bundle:nil];
[self.navigationController pushViewController:myController animated:YES];
[myController release];
}
Run Code Online (Sandbox Code Playgroud)
要返回上一个视图,只需从任何视图控制器调用:
- (void)goBack {
[self.navigationController popViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
阅读UINavigationController的文档,了解更多浏览视图的方法.此方法只是执行此操作的众多方法之一,可能并不适合所有情况.
我应该从我用于加载其他视图控制器的主视图控制器派生出什么类?
的UIViewController
如何将其连接到应用程序,以便它知道将其加载为主控制器?
阅读适用于iOS的View Controller Programming Guide的"定义子类"部分.抓一点 - 读完整件事.这一切都很重要,你现在也可以开始学习它.另请阅读适用于iOS的应用编程指南.再次,阅读整个内容,但应用程序生命周期部分与您的问题最相关.
在应用程序中使用导航控制器并允许其他视图获取对它的引用的公认标准方法是什么?
同样,这在View Controller Programming Guide中得到了很好的解释.视图永远不应关心导航控制器,但属于导航堆栈的任何视图控制器都可以通过各自的navigationController
属性直接访问导航控制器.
我的UIViewControllers是否应该拥有对其父控制器的引用,还是应该在需要时向UIApplication请求引用它?
视图控制器已在其(surprise!)parentController
属性中引用其父控制器.不过,最好让控制器避免对其父级做太多假设.如果控制器期望其父级是某种类型或响应某些消息,则重用该控制器或重新组织应用程序变得更加困难.尝试给控制器创建它时需要做的事情.如果控制器需要请求额外的数据或类似的东西,委托是一个很好的方法.
如何确保在用户导航时不会实例化视图及其控制器的额外副本?
谨慎行事.在正确结构化的应用程序中创建额外的视图副本没有太大的危险,因为每个视图控制器都应该处理自己的视图.如果您发现自己在拥有它们的视图控制器的上下文之外加载或以其他方式创建视图,请停止它.
归档时间: |
|
查看次数: |
12057 次 |
最近记录: |