iOS开发学习笔记③ - 视图控制器

iOS中设置新的根视图控制器 1、背景描述: 登录界面为app 阅读详情

视图控制器

视图控制器是UIViewController类或其子类的对象。
每个控制器都负责管理一个视图层次结构,包括处理视图相关用户事件,以及将整个视图层次结构添加到应用窗口。

以下以建立一个控制视图A和视图B的控制器为例。

UIViewController的view属性

1、 首先为A,B建立两个UIViewController:ControllerA和ControllerB继承了UIViewController;

ControllA、B从UIViewController中继承了一个重要特性:

@property (nonatomic, strong) UIView *view;

view属性指向一个UIView对象,UIViewController可以管理一个视图层次结构,view就是这个视图层次结构的根视图。

视图控制器可通过两个方式创建视图层次结构:

  • 代码方式:覆盖UIViewController中的loadView方法。
  • NIB文件方式。

通过代码创建

2、覆盖loadView方法.

#import "ViewA.h"

@implementation ControllerA

- (void)loadView
{
    // 创建一个ViewA对象
    ViewA *viewA = [[ViewA alloc] init];

    //将对象赋给视图控制器的view属性
    self.view = viewA;
}

@end

支线:设置根视图控制器

setRootViewController方法可将视图控制器的层次结构加入应用窗口。

当程序将某个视图控制器设置为UIWindow对象的rootViewController时,UIWindow对象会将该视图控制器的view作为子视图加入窗口,此外,还会自动调整view的大小,将其设置与窗口的大小相同。

AppDelegate.m文件didFinishLaunchingWithOptions方法中:

//建立一个A控制器对象
ControllerA *ca = [[ControllerA alloc] init];

// 设置根视图
self.window.rootViewController = ca;

支线:创建时间提醒示例

IBAction与IBOutlet

IBAction和IBOutlet关键字告诉Xcode,这些属性或方法之后会在Interface Builder中关联。

  • IBOutlet修饰的字段可以和InterfaceBuilder里相应控件相关联;
  • IBAction修饰的方法可以和InterfaceBuilder里控件的相应动作相关联。

- (IBAction)addReminder:(id)sender
这里的sender是参数名称,理论上可以指代任何对象,具体看方法的定义。
通常情况下,sender常用于传递消息的发送者,可以理解为触发方法的对象。


加载NIB文件

在ControllerA的指定初始化方法中设置需要加载的NIB文件:

(instanceType)initWithNibName:(NSString *) nibName
                        bundle:(NSBundle *) nibBundle;

该方法包含两个参数,分别是指定NIB文件的文件名以及所在的程序包。

AppDelegate.m文件didFinishLaunchingWithOptions方法中:

// 获取指向NSBundle对象的指针,该NSBundle对象代表应用的主程序包
// 向NSBundle发送mainBundle消息可以得到应用的程序包
NSBundle *appBundle = [NSBundle mainBundle];

//告诉初始化方法在appBundle中查找ControllerB.xib文件
ControllerB *cb = [[ControllerB alloc]initWithNibName:@"ControllerB" 
            bundle:appBundle];     

在运行时关联加载NIB文件的对象,可在XIB文件中关联File’s Owner:
选中大纲视图的File’s Owner,单机监视面板第三个按钮,打开标识监视面板(identity inspector),将class文本框中的内容改为需要关联的视图控制器(本例为ControllerB)。

接下来关联view和可关联的插座变量和方法。

此时可运行程序。

简化加载方法
初始化加载:

ControllerB *cb = [[ControllerB alloc] init];

此方法会加载与ControllerB同名的xib文件。
【轮命名的重要性】


UITabBarController

UITabBarController对象可以保存一组视图控制器。
还会在屏幕底部显示一个标签栏(tab bar),标签栏会有多个标签项(tab item),分别UITabBarController对象所保存的每一个试图控制器。

AppDelegate.m文件didFinishLaunchingWithOptions方法中:

// 创建一个UITabBarController对象
UITabBarController *tabBar = [[UITabBarController alloc] init];

// 将之前创建的两个视图控制器加入该对象
tabBar.viewControllers = @[ca, cb];

// 将UIWindow对象的根视图设置为UITabBarController
self.window.rootViewController = tabBar;

设置标签项的标题和图标

首先将图标文件导入Images.xcassets中。

之后在ControllerA.m文件中覆盖指定初始化方法,设置标签项:

- (instanceType)initWithNibName:(NSString *)nibNameOrNil
                         bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil 
                           bundle:nibBundleOrNil];

    if (self) {
        //设置标签的标题
        self.tabBarItem.title = @"A";

        //从图像文件创建一个UIImage对象
        //在Retina显示屏上会加载A@2x.png而不是A.png
        UIImage *i = [UIImage imageNamed:@"A.png"];

        //将UIImage对象赋给标签项的image属性
        self.tabBarItem.image = i;
    }

    return self; 
}

同理设置B的。


添加本地通知 (Local Notification)

首先创建一个UILocalNotification对象并设置显示内容和时间,然后调用UIApplication单例对象的scheduleLocalNotification方式注册。

- (IBAction)addReminder:(id)sender
{
    NSDate *date = self.datePicker.date;
    NSLog(@"Setting a remainder for %@", date);

    UILocalNotification *note = [[UILocalNotification alloc] init];
    note.alertBody = @"Hypnotize me!";
    note.fireDate = date;

    [[UIApplication sharedApplication] scheduleLocalNotification:note];
}

访问视图

通常情况下要在用户看到XIB文件中创建的视图之前,对它们做一些额外的初始化工作。

在以下两个方法中访问XIB文件中的视图:

  • 用于确认视图已加载的viewDidLoad,该方法会在视图控制器加载完NIB文件之后被调用。
  • viewWillAppear,该方法会在试图控制器的view添加到应用窗口之前被调用。

两个方法的区别是,如果只需要在应用启动后设置一次试图对象,就选择viewDidLoad,如果用户每次看到试图控制器的view时都需要设置,则选择viewWillAppear。

7、 视图控制器在iOS开发中的应用与优化 本文详细介绍了视图控制器在iOS开发中的应用与优化,包括最简单的视图控制器、标签栏控制器、导航控制器和模态视图控制器的使用场景及实现方法。通过具体示例展示了如何利用这些视图控制器简化应用程序开发过程,提高代码可维护性和可扩展性。 阅读详情

相关推荐

深入理解iOS视图控制器:无动画实践案例

本文还有配套的精品资源,点击获取 简介:UIViewController作为iOS开发中的核心组件,负责管理视图的生命周期和行为。本项目深入解析UIViewController的工作原理和关键概念,包括生命周期方法、属性与方法、视图层次结构、内容展示、数据绑定、手势识别、模态展示、状态保存与恢复,以及导航控制器的使用。源码提供无动画版实践,有助于开发者掌握视图控制器的常规操...

weixin_28872035的博客 1610

ios 视图控制器

视图控制器     视图控制器就是iOS MVC设计模式中的Controller部分。每个视图控制器都管理着一套视图,这些视图组成了程序用户界面里的一个组件。视图控制器负责协调视图的加载以及视图的样貌,同时还会响应用户的操作。     视图控制器也会与设备及底层操作系统相配合。比方说,用户旋转设备的时候,视图控制器会更新其中视图的布局。当操作系统的内存过低时,控制器也会对内存

ChasingDreamsCoder的博客 684

扣子(coze)实战|手把手教你搭建AI换装自动化工作流

摘要:本文介绍了使用Coze平台搭建AI换装工作流的详细教程。工作流包含模特图片上传、服装替换、任务提交和智能轮询等模块,通过change_model插件实现异步换装处理,并内置30秒循环查询机制。该工具支持自定义API密钥对接不同AI服务商,目前已上线共享空间并提供会员服务(59.8元/年)和VIP课程(499元/年),包含100+智能体和实战案例资源。完整体验地址见文中链接。

yueyehuguang的博客 1843

iOS 视图控制器(UIViewController)剖析

剖析了iOS中视图控制器的作用和原理。

7119

Win11移动热点连接故障排查:从IP配置失败到网络共享的全面解决指南

本文提供了Win11移动热点连接故障的全面排查指南,重点解决手机连接时卡在“获取IP地址”或提示“IP配置失败”的问题。文章从基础检查(如确认网络连接、选择正确共享源)入手,深入讲解了核心的网络适配器共享设置、关键系统服务检查、防火墙配置以及终极解决方案——网络重置。通过系统性的步骤,帮助用户彻底修复Win11移动热点无法共享网络的问题。

alice7model的博客 784

【24届计算机校招】面经汇总

这是笔者为了能够记录一下接下来一段时间会看的一些博客视频等汇总。一是为了汇总后常回来看看,而是为了后面的人在这个阶段准备的时候有个参考。现在已经6月底了,大部分高校的夏令营都出来了,而我至今还是夏0营,前几天还为川大会收双非而感到高兴,但遗憾的是川大并没要我。而我另一位双非的朋友已经拿到offer,在决定去南开还是华师了。没有对比就没伤害,我开始怀疑自己的决策是否正确——这段时间的夏令营我都有关注,但我仅报了少部分的几个酒吧舞,而没有选择海投,我觉得只要我认准了一个东西,我拼尽全力就一定能够获取到。

JehanRio's Private Blog 801

iOS视图控制器的跳转方法

视图的跳转有很多的方式,本文主要将其分为普通的viewController和导航控制器navigationController两种来进行详细说明

nineteen_的博客 6829

华为S5720交换机堆叠配置

S5720交换机,做下堆叠,两条线,交叉互联(即A交换机23口连到B交换机24口,A交换机24口连接B交换机23口)。PS:S5720堆叠可基于电口或者光口做,本次测试基于电口。 SWA配置 # 改名 [Huawei]sysname SWA # 最好先shutdown接口 [SWA]interface GigabitEthernet 0/0/23 [SWA-GigabitEthernet0/0/23]shutdown [SWA-GigabitEthernet0/0/23]interface G.

Markdown 6340

【IOS学习】IOS开发之视图和视图控制器

视图(View), 视图控制器(ViewController)是IOS开发UI部分比较重要的东西。在学习视图这一块的东西的时候,感觉和Java Swing中的Panel差不多。在UIKit框架中都有一个UIWindow来容纳我们的View。应用程序中几乎全部的可视控件都是UIView以及UIView的子类的实例,并且UIWindow也是UIView的子类。UIWindow可以不借助于父类视图显示在

practice makes perfect 658

联邦学习代码解读,超详细

联邦学习伪代码 损失函数使用方法 1 optimizer = optim.Adam(model.parameters()) 2 fot epoch in range(num_epoches): 3 train_loss=0 4 for step,(seq, label) in enumerate(data_loader): 5 # 损失函数 6 loss = criterion(model(seq), label.to(device)

weixin_42098322的博客 1万+

华为OD机试双机位C卷-魔法收积木 (C/C++/Py/Java/Js/Go)

华为OD机试(机考)双机位C卷 【魔法收积木】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为od - 魔法收积木。

qq_45776114的博客 1939

IOS开发之视图和视图控制器

视图(View), 视图控制器(ViewController)是IOS开发UI部分比较重要的东西。在学习视图这一块的东西的时候,感觉和Java Swing中的Panel差不多。在UIKit框架中都有一个UIWindow来容纳我们的View。应用程序中几乎全部的可视控件都是UIView以及UIView的子类的实例,并且UIWindow也是UIView的子类。UIWindow可以不借助于父类视图显示在

sulan2131的博客 345

51单片机+DS18B20+数码管显示+超温提示+Proteus仿真

51单片机+DS18B20+数码管显示+超温提示+Proteus仿真 Proteus仿真 实例代码 #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit we1 = P3^0; sbit we2 = P3^1; sbit we3 = P3^2; sbit we4 = P3^3; sbit DS = P1^0; sbit D1 = P3^6; sbit D2 = P3^7; uch

perseverance51博客 1538

iOS开发视图控制器(ViewController)调用[super viewXXX]的简单理解

iOS开发视图控制器(ViewController)调用[super viewXXX]的简单理解本人刚刚进入iOS开发行业,许多理解可能存在错误,希望各位老司机看到能够指出。那么言归正传,记得在学习iOS开发的时候,老师讲过,- (void)viewDidLoad 、这类的函数中,要先调用父类的方法即:[super viewDidLoad]来完成一些事情,那么这些方法究竟做了什么呢?于是我就创建了多

Cold_of_22F的博客 3293

【AI智能体】Docker 部署 Coze应用服务实战操作详解

Docker 部署 Coze应用服务实战操作详解

congge 4867

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

iOS视图控制器的生命周期及各阶段的作用

iOS视图控制器(UIViewController)的生命周期是指从它被创建到最终被销毁的过程中所经历的一系列阶段。每个阶段都有其特定的作用和执行时机,这些阶段和作用对于开发高效、稳定的iOS应用至关重要。

Good_tea_h的博客 1260

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

无涯教程-Swift - 视图&视图控制器

在iOS开发中,视图控制器是应用程序内部结构的基础,视图控制器是所有视图的父级。每个应用程序至少有一个ViewController。UIViewController是所有ViewController的父类。它定义了管理无涯教程视图的所有方法和属性。此类还管理从一个视图控制器到另一个视图控制器的事件和转换。它还在应用程序的不同部分之间坐标。

无涯教程 1137

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

关于iOS父(容器)视图控制器管理子视图控制器的根视图的思考总结

刚接触iOS开发的时候,手机应用上的一些界面老是无法弄清楚实现原理,后来通过阅读一些源码,逐渐了解了某些界面的一些实现方法。这里谈到的是父视图控制器管理子视图控制器视图的相关知识,归纳了几种情况,如果大家发现新的或者有好的解决方案,请联系我,我会很快更新与大家分享:1.侧栏:2.滚动切换子视图控制器:3.自定义TabbarController:4.同一界面放置两个tableview:以上可能都要涉及

WflytoC的博客 1015

iOS视图控制器(ViewController)

初始化和创建:为视图控制器分配内存和进行必要的初始化设置。加载视图:创建和设置视图控制器的根视图。视图加载完成:进行视图的初始化设置和子视图的添加,配置界面元素,设置数据源和代理等。视图即将显示:在视图即将显示在屏幕上时,执行一些界面更新和准备工作,如加载数据、注册通知等,以准备视图的显示。视图显示完成:当视图已经在屏幕上渲染完成时,执行与用户交互相关的操作和启动动画,如启动定时器、执行页面跳转后的逻辑处理、启动页面动画等。这个阶段是确保用户体验流畅性的关键时期。视图即将消失。

Chujun123528的博客 900

视图和视图控制器

视图是UIView类的实例,负责在屏幕上定义一个矩形区域。在iPhone的应用程序中,视图在展示用户界面及响应用户界面交互方面发挥关键作用。每个视图对象都要负责渲染视图矩形区域中的内容,并响应该区域中发生的触碰事件。这一双重行为意味着视图是应用程序与用户交互的重要机制。在一个基于

henry_sea的专栏 4802

IOS----在其他视图控制器中转换根视图控制器

怎么在其他视图控制器中切换根视图控制器 例如在一个普通的视图控制器UIViewControler中切换根视图控制器 1、利用UIApplacation这个类获取当前应用程序 2、设置委托对象,注意这个委托对象应为Appdelegate的一个对象 3、然后利用委托对象设置根视图控制器 例:现在要在UIViewControler这个视图控制器中设置自己为根视图控制器 1、首先包

Mr.xiaoma.wen 609

iOS开发中视图控制器ViewControllers之间的数据传递

iOS开发中视图控制器ViewControllers之间的数据传递 这里我们用一个demo来说明ios是如何在视图控制器之间传递重要的参数的。本文先从手写UI来讨论,在下一篇文章中讨论在storyboard中传递数据。 首先新建一个空工程,并添加一个根视图控制器类,如下图所示: # 在函数didFinishLunchingWithOption中添加几行代码,完成后如下: ...

aibiao0099的博客 191

iOS 获取当前正在显示的视图控制器ViewController(最全)

一、前言: 本来不怎么想写这篇文章的, 因为这种东西网上随便搜一大堆。但是还是发现项目中有些同学,没怎么理解好,直接照搬网上的,殊不知其本身虽处理了大部分情况,却仍有一些情况是漏掉的。所以就有了下面这篇文章。 二、场景: 在处理 URL Router 跳转的时候,经常需要得到“当前最上层的视图控制器”来进行视图跳转。 三、注意点: 网上比较多遗漏的场景是:A present B, B presen...

iOS开发 7034

iOS视图控制器使用学习笔记

UIViewControl是所有视图控制类的父类,所有子类都继承于它。 视图控制器是为iPhone应用程序提供了基础的视图控制模型,用户可以通过视图控制器来管理视图的继承关系。所以使用视图控制器可以方便地管理视图中的子视图的子视图,如不使用视图控制器来操作视图的话,那么所有的视图的视图必须有继承管理。(Android中的Activity的作用也是用于添加布局控件及控制控件之间的调用操作的关系,把...

wangyongyao1989的博客 620

iOS开发:标签视图控制器(UITabBarController)

iOS开发:标签视图控制器(UITabBarController) 一:了解: 1、结构:三层 2.重要的属性 3.运用:微信、QQ等都有运用(底下的每一个图标对应着一个视图控制器,之间并没有什么联系,最多就是传值) 二:具体实现(模拟豆瓣) 1.创建多个tabBarController: (1)第一个: ViewController *vc = [[V

Dongxk的博客 726

RMPickerViewController:iOS开发者的选择器视图控制器

RMPickerViewController:iOS开发者的选择器视图控制器 在移动应用开发中,选择器视图(UIPickerView)是一个常见且重要的UI组件。然而,标准的UIPickerView在某些场景下可能显得不够灵活和美观。今天,我们将介绍一个强大的开源项目——RMPickerViewController,它为iOS开发者提供了一个更加优雅和功能丰富的选择器视图解决方案。 项目介绍 RM...

gitblog_00232的博客 861
上一篇: iOS开发学习笔记② - 视图
下一篇: iOS开发学习笔记④ - 文本框 - 委托
死烤鹅
博客等级 码龄12年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值