- 用ViewController实现一个弹窗,presentViewController来弹出窗口
- @interface BNRImagePreviewController,包含一个 UIImageView 来展示大图
Step 1:
声明了一个 BNRImagePreviewController,给它创建了一个xib,
拖了一个 UIImageView 上去,设置了约束。
Step 2:
首先想在 Cell 的 ThumbNailView 的 tap 事件响应里面去 prsentViewController,
发现不行,View不能直接presentViewController或者pushViewController
Step 3:
为了解决这个问题,声明了一个委托,让 TableViewController 来展示 BNRImagePreviewController。
Step 4:
Preview ViewController 展示出来了,但是图像没有展示出来。
Step 5:
发现原因是在创建 ViewController 之后,马上给 controller 的 imageview 赋值是不行的
vc.imageView.image = image;
这个时候imageView还是nil
Step 6:
解决办法是给 ViewController 增加了一个 UIImage 的属性来存放要展示的图像,
在viewDidLoad里面给imageView.image赋值
问题解决了,但根本原因是什么?这里要对 View Controller 的创建流程有更深入的了解。
View Controller 的生命周期
- init
- initWithNibName
View Controller 被创建了,数据进行了初始化,但 view 还是 nil
- loadView
- viewDidLoad
view 被加载起来了,在这里可以替换成自定义的 View
- viewWillAppear
view 即将被显示,已经有了bounds,但还没有被加到了 superview 中,可以对View的外观进行调节
- viewDidAppear
view 被显示了,已经被加到了 superview 中,有了 frame
- viewWillDisappear
- viewDidDisappear
- viewDidUnload