1.因为在应用中view controller直接的关系是很复杂的,所以每一个view controller都有一些属性用于指示它是否在被其他的view controller 管理。我们可以查看一个view controller的tabBarController 或者navgationController属性来得知此view controller是嵌入到一个tab bar还是一个navgation bar中。也可以用view controller的parentViewController属性来得到它的parent controller。
2.当我们定义了一个新的UIViewController的子类,我们必须具体的指定此viewcontroller的view,有两种方法可以用来指定。手动的或者使用nib文件。如果手动的,必须实现loadView方法,在方法实现中给view属性赋值;如果使用nib文件,我们不能去覆盖loadView方法,而是用Interface Builder 创建nib file,然后初始化view controller 用方法initWithNibName:bundle:。
3.一个view controller是它view以及相关联的subview的唯一拥有者。他有责任创建这些view,并在适当的时间释放它们,包括在低内存的条件下或者view controller在released的时候。如果views存储在nib file中,每一个view controller会在nib file中创建view 的copy;然而通过手动的创建view,我们永远不要在多个view controller中使用相同的view对象。(If you store your views in a nib file, each view controller object creates its own copy of the view in that nib file. However, if you create your views manually, you should never use the same view objects with multiple view controllers.)
4.当按照层次创建views时,我们应该总是设置views的autoresizing properties 。当一个view controller显示在屏幕上时,它的root view经常调整自己的大小以适合可用空间,这个空用空间主要依赖于窗口当前的方向和以及其他一些界面元素的展现,如状态栏。可以通过 Interface Builder 设置autoresizing properties或者通过程序的方式改变每一个view的utoresizesSubviews 和autoresizingMask 属性。如果应用程序支持纵向和横向,设置这些熟悉是非常重要的。在方向改变时,系统使用这些属性去重新定位和调整view。
5.view controller通过didReceiveMemoryWaring方法,在其内存不足时,自动调用,其release一些不需要的内存。在3.0之前这是唯一的方法在你自定义的view controller中释放多余的内存,但是在3.0之后,方法viewDidUnload可能是一个恰当合适的地方来做你需要的。
当低内存发生时,UIViewController会清除掉它的views,如果他认为这些views能够重新reload或者重新创建。如果发生这种情况,它会调用viewDidUnload方法给代码一个机会去放弃和view hierarchy有关的任何对象的所有权。包括从nib file加载的对象,通过viewDidLoad方法创建的对象,在运行时创建的并加在view hierarchy 中的对象。通常,如果view controller包括outlets,我们应该用viewDidUnload方法去放弃这些outlets的拥有权,或者其他不再需要的和view 相关的data。
6.多方向旋转的支持在此不再讲述。
7.一些重要的方法,属性
(1)用nib file创建一个view controller
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
返回一个在指定的bundle中的nib file的新的初始化的view controller。
nibBundle是在制定的束中找nib 文件,如果是nil,则在主束里面寻找。
nib file不会立即加载,当你访问view controller的view时,它才会第一次加载。如果想在load之后进行一些其他的初始化时,覆盖viewDidLoad方法,在此方法中进行。
如果nibName为nil时,我们必须重写loadView方法,在此方法中创建views
如果在初始化的时候,没有指定nib文件的名字,也没有覆盖loadView方法,view controller会按照自己的方法寻找nib文件。
(2)view属性
此值默认为nil,如果你访问此属性,但是他当前的值为nil,view controller会自动的调用loadView方法,返回resulting view。缺省的loadView会尝试从nib文件中load view,如果view controller没有连接nib文件,则需要重写loadView方法创建root view 和其他的sub views。
在低内存的情况下或者当view controller 最后释放时,UIViewController会自动的设置此属性为nil。
(3)- (void)loadView
永远不要直接的调用此方法,view会在view属性请求但是为nil的情况下调用。如果手动的创建views,需要重写此方法,如果在Interface Builder中创建,绝对不能重写此方法。
缺省的此方法的实现是寻找一个有效的nib文件去load相应的文件。如果没有具体的nib,则缺省实现是创建一个plain UIView。
如果我们重写此方法手动的创建views,在实现中应该给view属性赋值,自定义的实现不应该调用super方法。
(4)- (void)viewDidLoad
当controller 的view加载到内存之后才调用此方法。
无论view是在nib file中load还是在loadView中程序创建,此方法都会调用。
(5)title属性
A localized string that represents the view that this controller manages.
(6)viewWillAppear
viewDidAppear
viewWillDisappear
viewDidDisappear
如果重新这些方法一定要调用super方法。
(7)wantsFullScreenLayout
一个BOOlean值指示是否允许view覆盖状态栏。
正常的情况下,view的frame不会覆盖设备的状态栏。
(8)parentViewController
返回当前view controller的parent
分享到:
相关推荐
UIViewController添加多个UIViewController。可以把UIViewController的View当作容器,让其他UIViewController添加进该View,并可以在多个UIViewController间切换。
在iOS开发中,`UIViewController`是苹果提供的一个核心视图控制器类,它是所有自定义视图控制器的基础。在iOS 13及更高版本中,Apple对`UIViewController`的模态弹出行为进行了重大调整,引入了新的交互模式,旨在...
在iOS应用开发中,`UIViewController`是苹果提供的一种基础视图控制器类,它负责管理屏幕上的内容和交互。有时候,开发者可能希望自定义导航栏的返回按钮,例如隐藏标题或者改变其外观。在这个场景下,我们可以创建...
在iOS应用开发中,`UIViewController` 是一个至关重要的类,它是所有视图控制器的基础。`UIViewController` 负责管理屏幕上的内容,包括视图、用户交互和其他控制器的协调。本示例源代码提供了 `UIViewController` ...
1. **创建Category**:创建一个`UIViewController`的Category,例如`UIViewController+PageTracking`,这样可以在不修改原`UIViewController`的基础上添加新的功能。 2. **获取原始IMP**:获取需要替换的方法的原始...
### UIViewController 生命周期详解 在iOS开发过程中,`UIViewController`作为UIKit框架中的一个重要组成部分,其生命周期管理是每一个iOS开发者都需要掌握的核心技能之一。理解`UIViewController`的生命周期不仅有...
在iOS应用开发中,UIStoryboard和UIViewController是两个核心组件,用于构建用户界面。当你需要在多个UIViewController之间实现平滑切换时,通常会采用各种技术来提供流畅的用户体验。本教程将深入探讨如何在iOS应用...
AICustomViewControllerTransition, 为iOS创建定制UIViewController转换的简单而简洁的方法 AICustomViewControllerTransition为iOS创建定制UIViewController转换的简单而简洁的方法没有限制,也没有实现...
`UIViewController`是iOS应用开发中的核心组件之一,属于UIKit框架,它是显示用户界面的主要控制器类。在iOS应用中,每个可视的屏幕或者视图都由一个`UIViewController`实例管理。这个类不仅负责管理屏幕上的内容,...
3. **Automatic Reference Counting (ARC)**:iOS5开始支持ARC,这是一个内存管理机制,自动处理对象的引用计数,减轻了开发者手动管理内存的工作。对于UIViewController,这意味着开发者无需在init、dealloc等方法...
3. **内存管理**:OC使用引用计数进行内存管理,笔记会讲解`retain`、`release`、`autorelease`等关键字的使用,以及ARC(Automatic Reference Counting)自动引用计数的原理和实践。 4. **类别与分类**:OC允许对...
class ScaleTransition: NSObject, UIViewControllerAnimatedTransitioning { func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { return 0.5 } ...
class CustomViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 添加UI元素,如UILabel、UITextField、UIButton等 } } ``` 接下来,我们要处理弹出动画。在iOS中,...
class DestViewController: UIViewController, ValuePassingProtocol { func didReceiveValue(value: String) { print("Received value: \(value)") } } ``` 3. 在发送数据的UIViewController中,使用代理或者...
在iOS开发中,`UIViewController`和`UITableViewController`都是核心的视图控制器,它们各自扮演着不同的角色。本文将深入探讨这两个类的区别,以及在实际应用中如何选择和使用它们。 `UIViewController`是所有...
在iOS开发中,UIViewController是一个至关重要的组件,它是MVC(Model-View-Controller)设计模式中的控制器部分。在iOS应用的界面构建中,UIViewController扮演着协调者和管理者角色,负责组织和控制应用的用户界面...
在iOS开发中,`UIViewController`是苹果提供的一个核心类,用于构建用户界面。自iOS 5发布以来,这个类引入了一些新的使用方法,极大地增强了UI的管理和交互能力。本篇文章将详细探讨`UIViewController`在iOS 5及...
在iOS应用开发中,UIViewController是核心的控制器类,它负责管理屏幕上的用户界面视图以及与之相关的数据。本文将深入探讨UIViewController的生命周期及其主要属性和方法,帮助开发者更好地理解和运用这一关键组件...
@class CustomViewController; ``` 然后,在`applicationDidFinishLaunching:`方法中实例化`CustomViewController`并将其view添加到主窗口(window)中: ```objc - (void)applicationDidFinishLaunching:...