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

问题

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

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

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

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

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

解决方法

使用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];

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 18:37:45

iOS --- UIViewController中的loadView使用场景的相关文章

UIViewController中的loadView方法

一.死循环(self.view为nil) @implementation ViewController - (void)loadView{ NSLog(@"loadView......."); } - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"viewdidLoad....."); UIView *selfView = self.view; } - (void)didReceiveMemoryWarning {

iOS: 在UIViewController 中添加Static UITableView

如果你直接在 UIViewController 中加入一个 UITableView 并将其 Content 属性设置为 Static Cells,此时 Xcode 会报错: Static table views are only valid when embedded in UITableViewController instances. 意思是说,如果 UITableView 不是在 UITableViewController 而是在 UIViewController 中的时候,是不允许将 U

iOS Sprite Kit教程之滚动场景

iOS Sprite Kit教程之滚动场景 滚动场景 在很多的游戏中,场景都不是静止的,而是滚动的,如在植物大战僵尸的游戏中,它的场景如图2.26所示. 图2.26  植物大战僵尸 在图2.26中,用黑色框框住的部分是在屏幕上显示的,即玩家是可以看到的.右边的这些内容玩家就看不到了,为了让玩家可以熟悉场景中的内容,此游戏在开始时,首先对屏幕中的场景进行滚动.本节将为开发者实现场景滚动的功能. Sprite Kit中让场景进行滚动 以下是如何让一个场景进行滚动的具体实现方法. 1.创建项目以及添加

iOS开发中UIPopoverController的使用详解

这篇文章主要介绍了iOS开发中UIPopoverController的使用,代码基于传统的Objective-C,需要的朋友可以参考下 一.简单介绍 1.什么是UIPopoverController 是iPad开发中常见的一种控制器(在iPhone上不允许使用) 跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController 它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面 2.使用步骤 要想显示一个UIPopoverController,需要经过下列步骤

聊聊iOS开发中耳机的那点事(监听耳机拔插、耳机线控)-b

如果说一个项目出现的最重大的事故,那无疑就是开发人员使用了不可控的元素. 前言 iOS开发当中有关于视音频播放的开发不在少数,用户时常会使用到一种输出设备,那就是"耳机",这一篇博客写的就是关于耳机的一些开发相关的技术点. 检测耳机是否插入 看到上面的标题的时候一定要注意,这里说的是"检测耳机是否插入",这里只是一次性的检测,不是实时监控耳机的拔插,但是有一些时候,下面的这个方法已经足够满足我们的开发需求了. 首先,我们需要导入AVFoundation.framew

iOS开发——淫技篇&iOS开发中各种淫技总结(六)

iOS开发中各种淫技总结(六) swift中指针的使用 在 Swift 中,指针都使用一个特殊的类型来表示,那就是 UnsafePointer<T>.遵循了 Cocoa 的一贯不可变原则,UnsafePointer<T> 也是不可变的.当然对应地,它还有一个可变变体,UnsafeMutablePointer<T>.绝大部分时间里,C 中的指针都会被以这两种类型引入到 Swift 中:C 中 const 修饰的指针对应 UnsafePointer (最常见的应该就是 C

(翻译)开始iOS 7中自动布局教程(二)

这篇教程的前半部分被翻译出来很久了,我也是通过这个教程学会的IOS自动布局.但是后半部分(即本篇)一直未有翻译,正好最近跳坑翻译,就寻来这篇教程,进行翻译.前半部分已经转载至本博客,后半部分即本篇.学习IOS自动布局的朋友可以看看.自动布局很强大. 这篇教程绝对的最好的学习IOS自动布局的文章,没有之一 原文地址:Beginning Auto Layout Tutorial in iOS 7: Part 2 正文如下: 请注意: 团队成员Matthijs Hollemans (IOS学徒系列的作

关于iOS程序中插入广告的问题

版权所有,转载请注明出处 陈军刚 对于开发面向全球用户的免费软件,插入Google的Admob广告和Apple的iAd是开发者实现盈利的最好选择.那接下来将介绍一些在iOS程序中插入Google的Admob广告的一些步骤. 第一步:加入ADBannerView 首先,在你的工程中引入iAd.framework ScenicViewController.h 1 #import <UIKit/UIKit.h> 2 #import <iAd/iAd.h> 3 4 @interface S

iOS开发中常用的几种设计模式

下面是iOS开发中比较常用的几种设计模式.详情如下所示: (一)代理模式 应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现.优势:解耦合敏捷原则:开放-封闭原则实例:tableview的 数据源delegate,通过和protocol的配合,完成委托诉求.列表row个数delegate自定义的delegate (二)观察者模式应用场景:一般为model层对,controller和view进行的通知方式,不关心谁去接收,只负责发布信息.优势:解耦合敏捷原则:接口隔离原