iOS AutoLayout: 从 XIB 中加载 UIViewController

运筹优化算法工程师入门指南:从数学基础到实战项目(附学习资源清单) 本文为运筹优化算法工程师提供全面的入门指南,涵盖数学基础、技术工具链和实战项目。从线性代数到动态规划,详细解析核心数学学科和建模方法论,并推荐Python、C++等编程工具及Gurobi、CPLEX等求解器。通过车辆路径问题(VRP)和生产排程案例,展示运筹优化在物流和制造领域的实际应用,附赠学习资源清单助力快速入门。 阅读详情

在博客 iOS AutoLayout: 关联 Xib 和 UIViewController
讨论了 UIViewController 如何和一个 xib 关联并且展现出来.

在那篇博客中, 最后说到使用下面这种方式可以加载 ViewController

-(instancetype)initWithNibName:(NSString )nibNameOrNil bundle:(NSBundle )nibBundleOrNil

今天和大家一起聊聊.

新建一个 iOS 工程, single view 即可.

创建一个 ViewController, 即 MainPage

然后再创建一个名称为 MainPage 的 xib 文件.

工程文件大概这个样子:

1

按照博客 iOS AutoLayout: 关联 Xib 和 UIViewController
里面那样设置 File owner 和 View 的关联.

设置后如下图

1

3

xib 效果图很简单

4

MainPage.m

#import "MainPage.h"

@interface MainPage ()

@property (strong, nonatomic) IBOutlet UIButton *byeBtn;

@property (strong, nonatomic) IBOutlet UILabel *xx;

@end

@implementation MainPage

- (instancetype)init
{
    NSLog(@"MainPage | init...");

    self = [super init];
    if (self) {

    }
    return self;
}

- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    NSLog(@"MainPage | initWithNibName...");

    if (self == [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {

    }

    return self;
}


- (void)viewDidLoad
{
    [super viewDidLoad];

    self.xx.text = @"start...";
}

- (IBAction)onClickByeBtn:(id)sender
{
    [self dismissViewControllerAnimated:YES completion:^{

    }];
}

@end

在根控制器(ViewController)里面打开 MainPage

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    [self performSelector:@selector(goPage) withObject:nil afterDelay:1.f];
}


- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

}

- (void)goPage
{
    MainPage *page = [[MainPage alloc] initWithNibName:@"MainPage" bundle:nil];

    [self presentViewController:page animated:YES completion:^{

    }];
}

@end

运行, 既可以看到效果.

没有任何异常的 crash.

下面, 我们修改一下打开 MainPage 的方式

- (void)goPage
{
    //MainPage *page = [[MainPage alloc] initWithNibName:@"MainPage" bundle:nil];

    MainPage *page = [[MainPage alloc] init];

    [self presentViewController:page animated:YES completion:^{

    }];
}

一样可以展现视图内容.

看一下控制台日志

MainPage | init…
MainPage | initWithNibName…

可以看出, init 最终调用了 initWithNibName 方法.

这个时候, 大家可以猜想, UIViewController 会默认调用initWithNibName方法, 换句话说, 或优先考虑 xib.
并且加载 xib 是使用默认的类名称来加载的.

于是乎…

你把 MainPage.xib 这个文件修改一下名称, 使用第一种加载方式会 crash, 因为找不到对应的 xib 文件.
除非你指定修改后的 xib 文件名.

使用第二种也是展现一个空视图.

另外, 如果你想省去单独设置 xib 的 File Owner 以及和 View 直接的关系, 可以在创建 ViewController 的时候, 选择Also create XIB file这个选项, 会自动帮你设置.

推荐大家阅读

  1. 浅论ViewController的加载
  2. 关于 initWithNibName 和 loadNibNamed 的区别和联系
WandB本地部署踩坑指南:从Docker启动到License更新的完整流程(附常见错误解决方案) 本文详细介绍了Weights & Biases(WandB)机器学习实验管理平台的本地化部署全流程,涵盖从Docker环境搭建、许可证管理到常见错误排查的实战经验。针对企业级应用场景,文章还提供了性能优化、高可用架构设计及开源替代方案Trackio的评估与迁移策略,为构建安全、可控的内部实验追踪平台提供完整解决方案。 阅读详情

相关推荐

SWIFT报文格式解析:从MT103到MT760,这些金融电文你了解多少?

本文深入解析SWIFT报文格式中的MT103与MT760,详细介绍了这两种金融电文的结构、应用场景及实操技巧。MT103用于国际汇款业务,MT760则适用于银行保函开立,两者在国际金融交易中扮演关键角色。文章还提供了常见问题解决方案和自动化处理建议,帮助金融从业者高效处理跨境业务。

h9j8k7l6m5n的博客 1144

iPhone开发学习笔记005——使用XIB自定义一个UIView,然后将这个view添加到controller的view...

一、新建一个single view application类型的iOS application工程,名字取为CustomView,如下图,我们不往CustomViewViewController.xib中添加任何控件: 二、新建一个CustomView.xib,过程如下: 然后往界面上拖一个label和一个button: 接下来得建立CustomViewV...

weixin_34380296的博客 247

abap中使用Screen painter为普通屏幕创建单选按钮组radiobutton组的过程

选择屏幕中,创建radiobutton组直接使用代码实现,如下所示 SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-001. PARAMETERS R1 RADIOBUTTON GROUP GR1. PARAMETERS R2 RADIOBUTTON GROUP GR1. PARAMETERS R3 RADIOBUTTON GR

charliefromkansas的博客 8303

正确的加载xib文件的View或者ViewController

可能很多人都非常熟悉了,在故事版中加载一个ViewController。  ViewC *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"myController"]; [self.navigationController pushViewController:viewControlle

u012986410的博客 2万+

SRC漏洞挖掘实战指南:从零入门到月入过万的网络安全副业

网络安全的核心在于识别和修复系统缺陷,其中逻辑漏洞与信息泄露是常见的安全风险。其原理在于应用程序在业务逻辑设计或数据处理过程中存在缺陷,导致未授权访问或敏感数据暴露。掌握这些技术对于构建安全的应用体系至关重要,不仅能有效防范攻击,也为安全研究人员提供了将技术能力变现的合法途径。在漏洞赏金(Bug Bounty)和SRC(安全应急响应中心)等应用场景中,白帽子通过系统化的测试方法,挖掘此类漏洞,既能获得经济回报,又能积累宝贵的实战经验。本文聚焦于逻辑漏洞与信息泄露的实战挖掘技巧,为初学者提供清晰的入门路径和效

weixin_28568819的博客 351

告别ROS1思维:在ROS2 Humble上,用Python搞定MoveIt2机械臂控制的完整流程

本文详细介绍了在ROS2 Humble环境下使用Python控制MoveIt2机械臂的完整流程。从环境配置、架构变革到实战操作,涵盖URDF适配、Action接口编程及性能优化技巧,帮助开发者高效迁移ROS1项目至ROS2平台,实现工业级机械臂控制。

weixin_30352645的博客 451

[Swift]ViewController中xib控件为空

在ViewController的xib中定义了一些控件,然后在使用的时候会因为这个控件为空而崩溃,报错为: Swift Error fatal error: unexpectedly found nil while unwrapping an Optional value    What? 解决办法如下: 1.首先要保证正确...

weixin_33832340的博客 336

【Unity 城市建模插件】POLY-Megapolis City Pack 提供超过数百种城市建筑、道路、车辆与城市家具模型,完美适用于构建现代化城市、模拟城市游戏、都市题材冒险类游戏和开放世界项目

POLY - Megapolis City Pack 是一套风格统一、内容丰富的低多边形城市建模资源包,专为 Unity 引擎设计。该资源包提供超过数百种城市建筑、道路、车辆与城市家具模型,完美适用于构建现代化城市、模拟城市游戏、都市题材冒险类游戏和开放世界项目。无论是快速原型开发还是正式发布项目,POLY 系列都能提供高效、风格统一的解决方案。

2403_88403568的博客 635

iOS 创建带有Xib文件ViewController时 如何正确设置frame?

iOS开发中如何在创建ViewController时一起创建了Xib文件,这时我们在ViewDidLoad设置frame时 会出现获取到的view.frame是错误的,原因是: 调用方法viewDidLoad中,所有的控件的frame都是在当前storyboard中状态,然后viewdidlayoutsubview,应该是这个方法。这个会根据你在界面上所设定的约束开始调整各个view,如果没有约

jeffasd的专栏 6886

全功能爬虫框架:Botasaurus 的详细使用(现代化、反检测、高并发的智能爬虫框架)

Botasaurus是一个基于 Python 的全栈式智能数据采集框架。它深度融合了以下关键技术: 无头浏览器自动化(Headless Browser Automation):基于 Playwright 或 Puppeteer,支持 Chromium、Firefox、WebKit; 高级反检测引擎(Anti-Detection Engine):自动绕过 WebDriver、Canvas、AudioContext 等 50+ 种指纹检测; 声明式任务模型(Declarative Task Model):用装

数据知道的博客 4374

Qt入门教程【基础控件篇】QLineEdit输入框

QLineEdit输入框

小鱼酱的博客 3263

iOS XIB文件和UIViewController关联

1、在Cocoa Touch中创建ZYViewController视图控制器,在User Interface中创建一个view的bluleView.xib文件 2、点击bluleView.xib,然后Option+Command+3打开身份检查器,将默认的NSObject改成ZYViewController 3、在bluleView.xib中,按住Control键把File's Ow...

bangjiejuan2225的博客 264

基于Playwright与异步技术的公司评价智能爬取实战:以Glassdoor为例

本文将介绍一套基于最新Python技术的智能爬虫解决方案,使用Playwright实现浏览器自动化,结合异步编程和智能解析技术,高效抓取Glassdoor等平台的公司评价数据。我们不仅关注数据获取,更注重数据的结构化处理和反反爬虫策略的实现。

2201_76125261的博客 223

iOS_6_ToolBar+xib+红楼梦

终于效果图 BeyondViewController.h // // BeyondViewController.h // 6_ToolBar // // Created by beyond on 14-7-24. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import &...

weixin_34337381的博客 107

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

关于xib文件和storyboard文件的那些事儿

关于xib文件和storyboard文件的那些事儿 在ios中,一般建议使用代码布局,因为使用代码布局,后期维护容易,拓展容易,并且可以实现动态加载很多数据,但是代码布局比较繁琐,不适合初学者。Xib布局或者Storyboard布局比较方便。下面介绍一下xib和st...

dichuangheng8094的博客 329

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ViewController

ViewController ViewController 进入VC后先调用loadView,再调用ViewDidLoad ViewDidLoad皆为系统调用 需要先调用[super viewDidLoad] 控制器的View加载完毕的时候调用 viewLoad进行控件的初始化,数据的初始化 其中的self指的是控制器 添加控件的顺序是栈的顺序,即先添加的在底下,后...

weixin_30699831的博客 92

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

iOS 加载Viewcontroller的几种方法

// 一、根据StoryboardID(需要在Storyboard设置),通过ViewController所在的Storyboard来加载: UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"FicowVC"]; // 二、通过UIV.

az44yao的专栏 637

iOS UIViewController 和 xib 绑定 详解

1> 创建 UIViewController,此处不选择 Alse create XIB file 2> 创建 xib 文件 3> 在 xib 中,点击 Placeholder -> File’s Owner 在右边 Show the Identity inspector ,在 Class 中设置 xib 需要绑定 UIViewController

chenshun123的博客 1万+

UIViewController加载不出来/XIB加载不出来的问题总结

用storyBoard或是XIB创建界面时,创建语句应该包含[NSBundle mainbundle]或是bundle参数,并且应该指定identifier,不应该出现alloc init,否则在界面上设置的属性或是界面将无法显示,利用层级结构视图查找错误也不太容易发现

cuin123的博客 6131

通过Xib自定义UIViewController实例化时报错的解决

自定义一个UIViewController,名为FooViewController 因为希望各个VC独立分开,所以没有将自定义控制器的UI放到storyboard里,而是单独做了一个xib文件。 注意Xcode自定义继承自UIViewController的类且创建xib文件时,其xib中File’s Owner应该就是你自定义的类名,即FooViewController. 下面我们编写使用它...

享受开发,颠倒银河 934

XIB文件链接controller文件&&加载rootviewcontroller

1.定义好的xib文件rootView.xib,选中files·owners 在class中选择对应的viewController 2.如何在window中指定rootViewController ------在appdelegate.h中声明属性  @property (strong,nonatomic)rootViewController* rvc; ------在appd...

YJX20120621的专栏 230

xcode4.2 下xib文件和ViewController绑定方法

Xcode 4.2下,若是先建立xib文件,后创建ViewController类,则可以通过下列方法进行绑定,图如下: 1.打开xib编辑器,选择 FileOwner图标 2.选择右边的导航栏的第三个tab,将Class设置成你创建的ViewController类即可。

wu11wuwu的专栏 6399

The document "ViewController.xib" could not be opened. Could not read archive.

The document "ViewController.xib" could not be opened. Could not read archive. Please use a newer version of Xcode. Consider changing the document's Development Target to preserve compatibility....

agcsdn2015的博客 269

iOS 直接加载xib文件到ViewController中

xib 把它简单理解为一个View NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"PubTipView" owner:nil options:nil]; UIView *plainView = [nibContents lastObject]; //CGSize padding = (CG

刘胡来 2260

从XIB、Storyboard加载View或ViewController

一、在Storyboard中放置ViewController,然后可以用下面的方法加载,ViewController要设置Identifier。 UIViewController *vc =  [st instantiateInitialViewController]; 二、在xib中放置一个View,然后把file’s owner 设置为ViewContro

Ek的博客 1388

从xib加载UIViewController的一个坑

问题描述:项目中创建了一个XBLoginViewController,并勾选了Also Create XIB file,于是项目中生成了XBLoginViewController.h,XBLoginViewController.m和XBLoginViewController.xib三个文件.需要push或者modal这个xib时,使用[[XBLoginViewController alloc]ini

谁令骑马客京华 5950
上一篇: iOS AutoLayout: XIB 设置 CALayer 属性
下一篇: iOS 多线程: 信号量
veryitman
博客等级 码龄16年 472粉丝 310原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值