`
xumingrencai
  • 浏览: 1182469 次
文章分类
社区版块
存档分类
最新评论

iphone--UIViewController与UIView的关系

 
阅读更多

转载自:http://www.cocoachina.com/bbs/simple/?t38766.html

iphone--UIViewController与UIView的关系
UIViewController和Uiview是两个不同的类
UIViewController是视图控制器
而UIView是视图
也就是说,UIViewController是控制UIView的。
你也可以认为UIViewController就是一个相框
而UIView就是一个相片
相框可以随时随地的拿走这个相片而换另外一张相片
或者在这张相片上加一个新的相片。而相片
却不能操纵相框的。


UIView工作在第一线,向用户展示表现的内容,并接受用户的交互。UIViewController相当于导演,按照计划编排属下的UIView以何种形式展现,其中包含一些花哨的技巧,如翻转、淡入淡出等。
UIVewController的另一个功能是处理用户交互操作,注意这里我说的是"处理",当然UIViewController本身是不知道用户交互的,这就需要UIView将用户的交互操作(例如:touchesBegintouchesMoved)传递上来。一般常用的两种方法完成这种传递:

1、[self nextResponder] touchesBegin:touches...

2、使用Notification


不管以何种方式,如果UIViewController得到了用户的输入,那么它应该对UIView做些改变以响应用户的输入,这里要注意UIViewController应该只改变UIView的表现,而不应该处理其它事情,
更多的操作通过Delegate来进行,关于Delegate的应用场合下次讲解消息的传递方式中一起阐述。


UIView是一个视图,UIViewController是一个控制器,每一个viewController管理着一个view


***********************************************

关于UIView的userInteractionEnabled属性
如果父视图为ParentView包含一个Button,如果再ParentView上添加子视图ChildView,且ChildView盖住了Button,那么Button就得到不响应了,
为了让Button响应,可以设置ChildView的userInteractionEnabled = NO;最近被这个问题困扰了很久,开始想用事件传递的方法,重写类继承自UIView,最后被这简单属性搞定了....


***********************************************

UIView的一些基本方法理解:loadView、viewDidLoad、viewDidUnload、viewWillAppear、viewWillDisappear

经常使用UIView以及它的子类,一般对于init:,viewDidLoad:,dealloc:等方法应该是比较熟悉和了解的。
对于其它几个基本方法就不那么常用了,为了更好地编程使用这些方法,在此集中收集整理一下各方法调用的时机和作用:

init:方法
在init方法中实例化必要的对象(遵从LazyLoad思想)
init方法中初始化ViewController本身



loadView:方法
这是当没有正在使用nib视图页面,子类将会创建自己的自定义视图层。绝不能直接调用
如果手工维护views,必须重载重写该方法。
当view需要被展示而它却是nil时,viewController会调用该方法。
loadView和IB构建view
你在控制器中实现了loadView方法,那么你可能会在应用运行的某个时候被内存管理控制调用。 如果设备内存不足的时候, view 控制器会收到didReceiveMemoryWarning的消息。 默认的实现是检查当前控制器的view是否在使用。 如果它的view不在当前正在使用的view hierarchy里面,且你的控制器实现了loadView方法,那么这个view将被release, loadView方法将被再次调用来创建一个新的view。

viewDidLoad:方法
在视图加载后被调用:
如果是在代码中创建的视图加载器,他将会在loadView方法后被调用;
如果是从nib视图页面输出,他将会在视图设置好后后被调用。
重载重写该方法以进一步定制view
在iPhone OS 3.0及之后的版本中,还应该重载重写viewDidUnload来释放对view的任何索引
viewDidLoad后调用数据Model


viewDidUnload:方法
当系统内存吃紧的时候会调用该方法(注:viewController没有被dealloc)
内存吃紧时,在iPhone OS 3.0之前didReceiveMemoryWarning是释放无用内存的唯一方式,但是OS 3.0及以后viewDidUnload方法是更好的方式
在该方法中将所有IBOutlet(无论是property还是实例变量)置为nil(系统release view时已经将其release掉了)
在该方法中释放其他与view有关的对象、其他在运行时创建(但非系统必须)的对象、在viewDidLoad中被创建的对象、缓存数据等 release对象后,将对象置为nil(IBOutlet只需要将其置为nil,系统release view时已经将其release掉了)
一般认为viewDidUnload是viewDidLoad的镜像,因为当view被重新请求时,viewDidLoad还会重新被执行
viewDidUnload中被release的对象必须是很容易被重新创建的对象(比如在viewDidLoad或其他方法中创建的对象),不要release用户数据或其他很难被重新创建的对象


dealloc:方法
viewDidUnload和dealloc方法没有关联,dealloc还是继续做它该做的事情


viewWillAppear:方法
Called when the view is about to made visible. Default does nothing
视图即将可见时调用。默认情况下不执行任何操作


viewDidAppear:
Called when the view has been fully transitioned onto the screen. Default does nothing
视图已完全过渡到屏幕上时调用


viewWillDisappear:
Called when the view is dismissed, covered or otherwise hidden. Default does nothing
视图被驳回时调用,覆盖或以其他方式隐藏。默认情况下不执行任何操作


viewDidDisappear:
Called after the view was dismissed, covered or otherwise hidden. Default does nothing
视图被驳回后调用,覆盖或以其他方式隐藏。默认情况下不执行任何操作


分享到:
评论

相关推荐

    iphone开发笔记

    UIViewController内建Table View 7 将plist文件中的数据赋给数组 8 UITouch 8 Get the Location of Touches 9 Getting Touch Attributes 9 Touch Phase 9 从Plist里读内容 10 获取Documents目录 10 获取tmp目录 10 ...

    LitePopover:在 iPhone 的弹出窗口中显示 UIViewControllerUIView

    精简版在 iPhone 的弹出窗口中显示 UIViewController/UIView如何使用有 4 种方法可以显示弹出菜单显示内容并指向 FromView // Pop from this Buttonlet fromBtn = UIButton. buttonWithType (UIButtonType. ...

    iPhone开发秘籍.part2.rar

    3.2 使用Interface Builder 为UIView- Controller 构建视图.....66 3.2.1 温度转换器示例.....66 3.2.2 直接加载XIB 文件.....73 3.3 导航控制器.....73 3.3.1 设置导航控制器.....74 3.3.2 推入和弹出视图控制器......

    iPhone开发秘籍.part4.rar

    3.2 使用Interface Builder 为UIView- Controller 构建视图.....66 3.2.1 温度转换器示例.....66 3.2.2 直接加载XIB 文件.....73 3.3 导航控制器.....73 3.3.1 设置导航控制器.....74 3.3.2 推入和弹出视图控制器......

    iPhone开发秘籍.part1.rar

    3.2 使用Interface Builder 为UIView- Controller 构建视图.....66 3.2.1 温度转换器示例.....66 3.2.2 直接加载XIB 文件.....73 3.3 导航控制器.....73 3.3.1 设置导航控制器.....74 3.3.2 推入和弹出视图控制器......

    iPhone开发秘籍

    3.2 使用interface builder为uiview-controller构建视图 66 3.2.1 温度转换器示例 66 3.2.2 直接加载xib文件 73 3.3 导航控制器 73 3.3.1 设置导航控制器 74 3.3.2 推入和弹出视图控制器 74 3.3.3 导航项类 75...

    iOS7 Day-by-Day

    iOS7 is probably the most significant change to Apple's mobile operating system since the launch of the iPhone3G. Not only does it completely revamp the UI, but it also introduces loads of really ...

    iOS SDK Programming A Beginners Guide

    7 UIView and UIViewController 8 UITabBar and UITabBarController 9 UINavigationBar and UINavigationController 10 Tables Using UITableView and UITableViewController 11 Activity Progress and Alerting ...

    IOS自适配利器Masonry使用指南

    关于iOS布局自动iPhone6之后就是AutoLayOut,AutoLayOut固然非常好用,不过有时候我们需要在页面手动进行页面布局,VFL算是一种选择,而且VFL不复杂,理解起来很容易,实际开发中用的特别熟还好,要是第一次看估计要...

    ScrollingContentViewController:一个Swift库,简化了使视图控制器的视图可滚动的过程

    例如,考虑以下适用于iPhone Xs但不适合使用键盘的iPhone SE的注册屏幕: 可以通过将视图嵌套在滚动视图中来处理这种情况。 如Apple的“使用滚动视图”文档所述,您可以在Interface Builder中手动执行此操作,但是...

Global site tag (gtag.js) - Google Analytics