@ViewController
几种设计模式:
MVC:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
MVP:从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过 Controller(Model+Presenter+data binding).
MVVM:MVVM是Model-View-ViewModel的简写。微软的WPF带来了新的技术体验,如Silverlight、音频、视频、3D、动画……,这导致了软件UI层更加细节化、可定制化。同时,在技术层面,WPF也带来了 诸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化(Model View Model +two way data binding)。
后面会做更为详细的说明,这里不再赘述。
UIViewcontroller:它是用来管理界面View的控制器。
UIViewcontroller功能主要有:传递数据(在各个view中传递,在model和view之间传递),响应用户操作,内存管理、状态保持和适应设备(phone,pad等)。
界面View的创建:可通过Mainstoryboard或NSmainNibFile来创建(_loadMainStroyboardFileNamed:bundle或_loadMainNibFileNamed:bundle),如果没有这两个,用程序来初始化界面(didlaunch)否则则得到window为nil(黑屏)。
View Controller怎么创建其界面View:
从上图可以看出,View Controller用系统方法及UI方法或是xib方法(找寻view controller相关名字的nib创建),如果匹配不到则用UIView来创建空白视图。
ViewController的生命周期:ViewController生命周期会经历初始化、加载视图、销毁视图、生命结束等过程。
多个view controller
@Storyboard
Storyboard是一个用来管理各个View(或称为Scene)之间跳转或联系的一个东西,本质上storyboard是一个XML文件。下面来介绍storyboard一些功能。
is initial View Controller:主要用于定那个View为Storyboard的初始窗口,当只有一个View时又没有定义初始窗口时,打开App调用Storyboard时会显示黑屏(因为找不到需要调用的初始窗口)。
Segue:用于建立场景之间的跳转。可以用在storyboard中直接在两个view中Ctrl+拖动button或直接右键建立Segue。这样可以轻松在两个view中跳转。还有一个问题需要说明,就是要定义设置Segue的Indentifier,这样才能在代码中访问该Segue。还可以用代码来实现view之间的跳转,如下:
-(void)viewDidAppear:(BOOL)animated
{[self performSegueWithIdentifier:@"drawecg" sender:self];}
-[UIStoryboard storyboardWithName:bundle:]加载stroyboard的一个方法,主要用来实现不同storyboard中view的跳转,如下图:
Unwinding Segue:用来跳转回到之前的view中(反向传递数据给之前的View)。如下:
- (IBAction)unwindSegueToRedViewController:(UIStoryboardSegue *)segue { }
接着在Viewcontroller的Exit建立连接,连接到它的触发条件上。
正向传递可以用prepareForSegue。
多个storyboard
实际应用中,场景可能很多,所以可能需要多个storyboard方便管理。storyboard可以通过library的组件直接建立,也可以新建来建立。
@App Lifecycle
所谓生命周期,其实就是指从App启动到关闭这一过程中所发生的一系列事件。由于iOS 4之后引入了多任务功能,App能够在后台执行,而�iOS 3 是没有多任务功能的,故两者的生命周期并不相同。
- (void)applicationDidEnterBackground:(UIApplication *)application方法有大概5秒的时间让你完成这些任务。如果超过时间还有未完成的任务,你的程序就会被终止而且从内存中清除。
如果还需要长时间的运行任务,可以在该方法中调用
[application beginBackgroundTaskWithExpirationHandler:^{
NSLog(@"begin Background Task With Expiration Handler");}];
Xcodet调试功能
@Navigation Bar
导航栏
看到的controller不一定是top controller
用代码创建、跳转和设置控制nav
设置和控制(delegate,viewcontroller,navigation,toolbar)
navigation的界面定制:
Navigation的结构:
可以放在navigation bar的按钮都是继承自UIBarButtonItem(可用图片作为按钮,这些按钮一般是有实际作用的)
Navigation还可以放toolbar
[UIView appearance].tintColor=[UIColor redColor];
Bar占界面,如何将Bar藏起来(On tap等选项)
@Tabbar
UITabBarController:管理一堆view controller
UITabBarController的构成:viewcontrollers,customizableViewControllers(NSArray),selectedViewController,delegate。
UITabarItem属性调节设置(Title 和 Image,button中既有图片又有文字,与Navigation不一样的地方)
直接用tabbar的模式可以生成一个带有Tabbar的View
或和navigation一样用embed in来添加
太多的TabBarItem时,会自动归到more中,可以自己选择哪个显示,哪个不显示
UITabBarControllerDelegate:如何设置跳转前询问是否跳转
代码创建,管理与选中分页
简单定制:system Item
怎么用代码创建TabBarItem
网友评论