添加视图控制器(UIViewController)
添加视图控制器文件在iPhone应用程序中视图控制器(UIViewController)起着核心作用。顾名思义视图控制器负责管理控制视图。在iPhone上它们也帮助进行导航和内存管理。选中Xcode项目管理器里的项目即SayHello项目位于Groups and Files列表的顶部或者选中SayHello文件夹——新文件在添加时会被加入到当前选择的位置。 选中后在Xcode菜单中选择 File New New File也可以在选中的文件夹上面点右键选择 New File。在New File窗口中请选择Cocoa Touch然后选择UIViewController subclass。点击 Next 按钮在Options窗口请勾选 “With XIB for user interface”复选框。选中 “With XIB for user interface”后Xcode在创建视图控制器的同时会为其创建一份nib文件并将该文件添加到项目中。点击Next按钮在其后出现的保存文件窗口中为文件起个名字例如RootTimelineViewController并选择文件存储的位置如下所示点击 Save文件会被添加到项目中。接下来我们将创建控制器类的实例。创建视图控制器实例现在我们有了视图控制器的类和nib文件但要在应用程序代理中使用它还必须创建类的实例并且将实例存储在变量中以便操作它。在应用程序委托类的头文件(即SayHelloAppDelegate.h)中执行下述操作在一个类中访问另一个类首先需要引用被访问类的头文件。所以我们先在应用程序委托头文件(SayHelloAppDelegate.h)的接口声明前面-即SayHelloAppDelegate声明前面引用视图控制器(RootViewController)的头文件#import RootViewController.h然后在头文件大括号之间添加下面的代码这是为了向应用程序委托添加一个实例变量RootViewController *viewController;在大括号之后 end之前添加下面的属性声明property (nonatomic, retain) RootViewController *viewController;在头文件中添加完相应变量和属性申明后需要在对应的实现文件中合成属性的存取方法在dealloc方法中释放视图控制器的实例。在应用程序委托类的实现文件(即SayHelloAppDelegate.m)中执行下述操作在类的 implementation代码块中通知编译器为视图控制器合成存取方法synthesize viewController;在dealloc方法起始处释放视图控制器[viewController release];我们已经把视图控制器属性添加到应用程序的委托现在需要实际创建一个视图控制器实例并将其设置为属性的值。在应用程序委托类实现文件即SayHelloWorldAppDelegate.m文件中的applicationDidFinishLaunching: 方法开头添加如下代码这些代码用于创建一个RootViewController实例RootViewController *controller [[RootViewController alloc]initWithNibName:RootViewController bundle:nil];self.viewController controller;[controller release];这段代码的作用如下创建RootViewController这个视图控制器的实例。使用alloc方法创建一个视图控制器然后用initWithNibName:bundle:方法对其进行初始化。init方法先指定控制器应加载的nib文件然后指定在哪个程序包中可找到该文件。程序包是文件系统某个位置的抽象该位置存放了应用程序将会用到的代码和资源。使用属性的存取方法将创建好的视图控制器实例设置为viewController属性变量的值根据内存管理规则释放视图控制器视图控制器用来配置和管理在应用程序中看到的视图每一个视图也对应有一个视图控制器来管理。窗体window有一个根视图控制器——这个视图控制器负责配置当窗体显示时最先显示的视图。要让你的视图控制器的内容显示在窗体中需要去设置窗体的根视图控制器为你的视图控制器。所以我们的项目中在上面创建视图控制器实例代码后面再添加一行代码来设置窗体的根视图控制器为我们新添加的视图控制器self.window.rootViewController controller;最后一行来自于Xcode提供的模板自动生成的代码[self.window makeKeyAndVisible];这行代码会让包含了视图控制器视图的Window窗口显示在屏幕上。本章完整代码SayHelloAppDelegate.h文件#import UIKit/UIKit.h#import RootViewController.hinterface SayHelloAppDelegate : NSObject UIApplicationDelegate {RootViewController *viewController;}property (nonatomic, retain) IBOutlet UIWindow *window;property (nonatomic, retain) RootViewController *viewController;endSayHelloAppDelegate.m文件#import SayHelloAppDelegate.himplementation SayHelloAppDelegatesynthesize window_window;synthesize viewController;- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{RootViewController *controller [[RootViewController alloc]initWithNibName:RootViewController bundle:nil];self.viewController controller;[controller release];self.window.rootViewController controller;[self.window makeKeyAndVisible];return YES;}- (void)dealloc{[_window release];[viewController release];[super dealloc];}end测试运行在Xcode的菜单中选择 Product Run 或者点击左上角工具栏上的 Run 按钮iPhone模拟器应该会自动启动。当应用程序启动后还是看到一个白色屏幕不过第一次看到的白色屏幕是应用程序代理中的Window而这次看到的白色屏幕是视图控制器RootViewController中的视图。下一步我们将开始对界面进行编辑。编辑Nib文件在iPhone开发中一般都会用NIB文件来来负责界面显示也就是MVC模型里面的视图对象而NIB文件只包含用户界面元素不包含任何源码那么怎么让视图对象和视图控制器关联起来呢这就需要用到两个非常重要的概念插座变量outlet和文件拥有者代理对象Files Owner。视图控制器的视图和Nib文件视图控制器主要的职责就是配置和管理应用程序中所有的视图一般来说视图控制器的视图是放在一个Nib文件中当然也可以不需要Nib文件通过程序创建视图典型的如UITableViewController这样的视图控制器就可以不需要Nib文件。在创建视图控制器实例时其中一个主要的构造函数initWithNibName:bundle:的第一个参数就是视图控制器对应的Nib文件的名字。视图控制器在其 loadView 方法中加载它的Nib文件。如果是使用initWithNibName:bundle:构造函数生成的实例并且你想在视图加载完成后进行额外的设置只要重写视图控制器的 viewDidLoad 方法就好了。在Xcode中点击打开视图控制器的Nib文件即RootViewController.xib文件在Xcode中即可直接查看和编辑。文件包含三个对象文件拥有者代理Files Owner第一响应者代理First Responder以及一个视图View。视图View是视图控制器的主视图在主视图中还可以添加若干子视图。文件拥有者代理(Files Owner)代表Nib文件对应的视图控制器类。理解文件所有者代理的角色以及如何建立文件所有者和Nib文件中界面元素之间的连接是非常重要的。小贴士 在Xcode中编辑Nib文件时可以通过点击右上角工具栏按钮显示隐藏相应面板方便对界面编辑和属性设置。文件拥有者(Files Owner)在一个Nib文件中文件拥有者对象是其中最重要的对象之一因为正是通过它来建立起应用程序代码和Nib界面文件中对象之间的连接具体来说它就是对应Nib文件的视图控制器对象。以本项目为例RootViewController.xib这个Nib文件的文件拥有者对象就是RootViewController类的实例。一般来说在使用模板同时创建UIViewController文件和对应的Nib文件时它默认会设置Nib文件对应的文件拥有者为创建的UIViewController类。如果要修改或者设置Nib文件对应的文件拥有者可以使用 Identity Inspector 面板进行设置。如上图所示 本项目的RootViewController.xib文件对应的文件所有者在Identity Inspector 面板中Custom Class部分的Class项可以看到对应的值是RootViewController这表示文件拥有者就是RootViewController类的实例就可以在Xcode中访问文件拥有者类里面标志为IBOutlet的属性和IBAction的方法和Nib文件中的界面元素建立关联。视图插座变量在Xcode中使用 Inspector 面板或者在连接面板可以查看、创建、删除对象之间的连接。要查看视图控制器的连接可以通过以下步骤在Xcode的界面中从左侧的文件组选中要查看的视图控制器的Xib文件在视图编辑界面点击选中 Files Owner在 Inspector 面板选中 Connection inspector这里会显示文件所有者所有的插座连接在视图编辑界面按住Control键点击 Files Owner 或者在 Files Owner上点击右键弹出一个黑色半透明的面板显示文件所有者的所有连接在上面第三步右侧面板显示的连接面板和右键点击Files Owner弹出的半透明连接面板显示的信息和作用都是一样的可以根据个人习惯灵活使用。到目前为止唯一的连接是视图控制器的 view 插座变量。一个插座变量就对应视图控制器类的一个属性有时候也可以是一个实例变量只不过这个属性和nib文件中的某个界面元素连接在一起。此处的view的连接表明当nib文件 RootViewController.xib 被加载并且UIView的实例解档之后视图控制器的view实例变量会被设置为指向nib文件中的视图。

相关新闻

3步配置Python自动化脚本:告别演唱会抢票焦虑

3步配置Python自动化脚本:告别演唱会抢票焦虑

3步配置Python自动化脚本:告别演唱会抢票焦虑 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 当心仪的歌手演唱会门票开售时,你是否经历过这样的场景?手指疯狂…

2026/7/5 11:42:07阅读更多 →
4:IDEA中git的使用--回滚

4:IDEA中git的使用--回滚

以下三个阶段来介绍:未Commit的文件;已经Commit,但未push的文件;已经push的文件;1. 未Commit 对于未Commit的文件,回滚代码,可以在Commit窗口,选中文件,鼠标右键&#xf…

2026/7/5 11:37:07阅读更多 →
MediaPipe手势控制鼠标:原理与实现

MediaPipe手势控制鼠标:原理与实现

1. 项目概述:用MediaPipe实现隔空手势控制鼠标 最近在PiscCode技术社区看到一个很有意思的项目——通过手势识别实现隔空控制电脑鼠标。这个创意让我想起科幻电影里那些炫酷的隔空操作场景,现在借助MediaPipe这样的开源框架,我们完全可以在自…

2026/7/5 11:37:07阅读更多 →
AD74413R与STM32F405ZG的高精度工业信号处理方案

AD74413R与STM32F405ZG的高精度工业信号处理方案

1. 项目背景与硬件选型考量在工业自动化和精密测量领域,同时实现高精度模拟信号采集(ADC)和输出(DAC)是常见需求。AD74413R作为ADI公司推出的软件可配置四通道I/O解决方案,与STM32F405ZG这款带FPU的Cortex-…

2026/7/5 12:47:25阅读更多 →
计算机视觉入门实战:图像识别、目标检测与图像分割核心任务解析

计算机视觉入门实战:图像识别、目标检测与图像分割核心任务解析

1. 从“能跑起来”开始,理解计算机视觉的三大核心任务如果你刚开始接触计算机视觉,面对“目标检测”、“图像分割”、“图像识别”这些术语感到一头雾水,或者看了一堆理论却不知道如何动手,那这篇文章就是为你准备的。我不打算从复…

2026/7/5 12:47:25阅读更多 →
Cell-Free MIMO网络中可旋转天线技术解析与优化

Cell-Free MIMO网络中可旋转天线技术解析与优化

1. Cell-Free MIMO网络中的可旋转天线技术解析 在6G无线通信系统中,Cell-Free MIMO架构正成为突破传统蜂窝网络边界限制的关键技术。这种分布式网络架构通过大量地理分散的低复杂度接入点(APs)协同服务用户,理论上能够提供更均匀的覆盖和更高的频谱效率。…

2026/7/5 12:47:25阅读更多 →
TinyTorch:从零实现PyTorch核心机制的教学框架

TinyTorch:从零实现PyTorch核心机制的教学框架

1. TinyTorch:填补机器学习系统教育的空白作为一名在机器学习领域摸爬滚打多年的工程师,我深刻体会到算法理论与系统实现之间的鸿沟。很多同行能够熟练调用PyTorch或TensorFlow的API,却对框架内部的内存管理、计算图优化等核心机制一知半解。…

2026/7/5 12:47:25阅读更多 →
056、BasicVSR 视频超分:双向传播与光流对齐的核心技术解析

056、BasicVSR 视频超分:双向传播与光流对齐的核心技术解析

056、BasicVSR 视频超分:双向传播与光流对齐的核心技术解析从一次诡异的训练崩溃说起 去年冬天调BasicVSR,跑REDS数据集,batch size设成8,V100上吭哧吭哧跑了三天。第四天凌晨三点,loss突然从0.003飙到NaN。我第一反应…

2026/7/5 12:47:25阅读更多 →
终极显卡驱动清理解决方案:Display Driver Uninstaller专业指南

终极显卡驱动清理解决方案:Display Driver Uninstaller专业指南

终极显卡驱动清理解决方案:Display Driver Uninstaller专业指南 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-uni…

2026/7/5 12:42:25阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/5 1:30:27阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/5 3:48:10阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/5 3:48:09阅读更多 →