iOS --- UIViewController中的loadView使用场景

对之前的内容进行了补充及截图说明。
因为还要做其他的实验, 所以使用了Test1ViewController及实例test1VC,而之前是使用TestViewController及testViewController,这点应该不影响大家阅读。

问题

先看代码, 新建一个UIViewController的子类TestViewController(包含nib文件):
imageViewCourse和lbCourse是其两个属性,通过nib的IBOutlet方式添加。如下图:

新建Test1ViewController添加IBOutlet
这里写图片描述这里写图片描述

使用如下代码进行UIViewController之间的跳转:

TestViewController *testViewController = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil];

testViewController.imageViewCourse.image = image;
testViewController.lbCourse.text = course;

[self presentViewController:testViewController animated:YES completion:nil];

我们使用nib来加载一个TestViewController并对其属性赋值, 然后跳转。问题在于执行完initWithNibName之后,testViewController.imageViewCourse和testViewController.lbCourse都为nil, 则表现出来的是跳转到TestViewController之后, 其中的imageViewCourse和lbCourse中没有内容。如下图:

IBOutlet未更新内容断点调试
这里写图片描述这里写图片描述

解决方法

使用loadView方法触发nib中UIView的加载。

@property(null_resettable, nonatomic,strong) UIView *view; // The getter first invokes [self loadView] if the view hasn't been set yet. Subclasses must call super if they override the setter or getter.
- (void)loadView; // This is where subclasses should create their custom view hierarchy if they aren't using a nib. Should never be called directly.
- (void)loadViewIfNeeded NS_AVAILABLE_IOS(9_0); // Loads the view controller's view if it has not already been set.

即:

TestViewController *testViewController = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil];
[testViewController view];
//[testViewController loadView];
//[testViewController loadViewIfNeeded];

testViewController.imageViewCourse.image = image;
testViewController.lbCourse.text = course;

[self.navigationController presentViewController:testViewController animated:YES completion:nil];

结果如下图:

IBOutlet更新内容断点调试
这里写图片描述这里写图片描述

代码如上, 不做过多解释。三种方式其实殊途同归。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值