今天在用storyboard 写界面开发时遇到一些奇怪的问题。因此记录下用storyboard 布局。以及在代码中使用这些布局应该注意的问题。
/*****************刚学IOS不久,问题幼稚与否,还请各位大神轻虐*******************************/
我的工程界面布局是使用的storyboard 和约束,为了适配方便。
习惯在viewDidLoad中对控件进行一些自定义操作。但是发现,即使页面控件以及与头文件中的IBoutlet 连线了。在viewDidLoad函数中读取这些控件时,返回的都是nil。一开始很是郁闷,找不到原因,猜测是viewDidLoad函数中,storyboard界面中的控件还没初始化。因此查阅了viewController的常见的方法。最终把对控件的一些自定义修改写在了函数viewDidLayoutSubviews里。即等到控制器管理的视图把它包含的所有子视图排列完成后,再进行一些自定义的修改。
viewController中各事件有执行先后顺序,因此不同的函数中适合做不要的事情,对此做一个总结。
initWithNibName:bundle: |
初始化UIViewController.也可以自定义init方法。但是在写自定义init方法。先要调用[super initWithNibName:nil bundle:nil]。 |
loadView |
访问viewcontroller的view时,如果view为nil会自动调用该方法。 |
viewDidLoad | 当该控制器管理的视图被装载完成后,系统自动调用该方法。重写该方法时要先调用[super viewDidLoad]。 |
viewWillAppear | 当该控制器管理的视图将要显示出来时,系统自动调用该方法。 |
viewDidAppear | 当该控制器视图的视图显示出来后,系统自动调用该方法。 |
viewWillLayoutSubviews | 当该控制器管理的视图将要排列它包含的所有子视图时,系统自动调用该方法。 |
viewDidLayoutSubviews | 当该控制器管理的视图把它包含的所有子视图排列完成后,系统自动调用该方法。 |
ViewWillDisappear | 当该控制器管理的视图将要被隐藏或者将要被移出窗口时,系统自动调用该方法。 |
还有就是viewDidDisappear.
那么使用storyboard布局界面时,在viewDidLoad访问空间为nil的问题已经很明显了。因为在storyboard中使用约束来布局。在viewDidLoad函数中,各空间的排列还没完成,自然是访问不到了。
时间: 2024-11-08 23:55:14