当前位置: 首页 > news >正文

IOS课程笔记[1-3] 第一个IOS应用

安装开发环境

安装Xcode软件

历史版本查找 https://developer.apple.com/download/all/?q=debug

创建Object-C项目

启动过程

  • 步骤
    1.加载Main中定义的storyBoard
    2.加载Main控制器
    3.加载控制器下的View组件显示

获取控件的两种方式

定义属性连线:@property (weak, nonatomic) IBOutlet UIView *topView;

标签获取:ViewWithTag效率低

第一个APP

  1. 定义头文件

import <UIKit/UIKit.h>

2.定义界面属性


#pragma mark 主页欢迎词@property (nonatomic,weak)IBOutlet UILabel *lableHello;

3.定义函数


#pragma mark 开始按钮点击界面- (IBAction)LoginClickEvent{NSLog(@"%s",__func__);printf(__func__);self.lableHello.textColor = UIColor.redColor;self.lableHello.text = @"Hello Ciara";self.lableHello.font = [UIFont systemFontOfSize:20.f];self.lableHello.backgroundColor=[UIColor yellowColor];}

运行项目


基础语法

Objective-C最大的特色是承自Smalltalk的消息传递模型(message passing)

  • 定义函数不同
    面向对象式
obj.method(argument)

消息传递式

[obj  method : argument]

将method转递给obj,运行时处理,如果传递nil 不做处理

创建字符串

NSString* myString = @"My String\n";
NSString* anotherString = [NSString stringWithFormat:@"%d %s", 1, @"String"];
NSString* fromCString = [NSString stringWithCString:"A C string"
encoding:NSASCIIStringEncoding];

按钮操作

//设置title 
[self.loginBtn  setTitle:@"Logout" forState: UIControlStateNormal]; 

view操作

ViewController生命周期

  • loadView:
    每次访问controller的view(比如controller.view、self.view)且view为nil,loadView方法就会被调用。用于创建Controller的View,使用super调用父方法
  • viewDidLoad:
    1.系统调用 加载完成后调用View

2.空间初始化、数据初始化、懒加载

3.在视图加载后被调用,如果是在代码中创建的视图加载器,他将会在loadView方法后被调用,如果是从nib视图页面输出,他将会在视图设置好后后被调用。只会被调用一次,之后进入这个ViewController不调用此函数

  • viewWillAppear:
    视图将要显示

  • viewWillLayoutSubviews:
    控制器的view将要布局子控件(在这个方法里,部署需要改变重新刷新view的代码,功能类似view的layoutSubViews()这个方法,需要注意的是,这个方法里一般都需要重置的view的frame,宽度和高度的获取,因此view的frame一般都写在这个方法里)

  • viewDidLayoutSubviews:
    控制器的view布局子控件完成

  • viewDidAppear:
    视图已经显示,父空间window显示

  • viewWillDisappear:
    视图将要消失

  • viewDidDisappear:
    视图已经消失,在Controller被切换时调用,第二个视图出现后第一个视图消失

  • didReceiveMemoryWarning:
    1.系统调用,内存警告时调用

2.去除不必要的内存、耗时内存

基本属性

左上角为原点
fream: 父控件中的位置与尺寸
bounds:控间本身的位置和尺寸 中心点不变 四周延伸
center: 控件点的位置 中心点的位置

动态添加控件

- (void)viewDidLoad {[super viewDidLoad];self.username=@"";//添加文本UILabel *lb=[[UILabel alloc] init];[lb setText:@"更换主题"];[lb setFrame:CGRectMake(5, 0, 400, 40)];[self.topView addSubview:lb];//添加开关UISwitch *sw =[[UISwitch alloc] init];[sw setFrame:CGRectMake(200, 0, 200, 40)];[self.topView addSubview:sw];//添加多选框UISegmentedControl *sc =[[UISegmentedControl alloc] initWithItems:@[@"yellow",@"red",@"Green"]] ;[sc setFrame:CGRectMake(5, 55, 300, 40)];[self.topView addSubview: sc];//设置控件位置[self.topView  setCenter:CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2) ];}- (void) viewDidAppear:(BOOL)animated{[super viewDidAppear:animated];//操作 当前页面的父控件只能在此方法获取到父控件UIwindow}

附录:

  • 教学视频:
    https://www.bilibili.com/video/BV1MF411h7SG/?p=4&spm_id_from=pageDriver&vd_source=38863a419514cab0ef6abb1aa88f9a79

相关文章:

IOS课程笔记[1-3] 第一个IOS应用

安装开发环境 安装Xcode软件 历史版本查找 https://developer.apple.com/download/all/?qdebug 创建Object-C项目 启动过程 步骤 1.加载Main中定义的storyBoard 2.加载Main控制器 3.加载控制器下的View组件显示 获取控件的两种方式 定义属性连线&#xff1a;property (…...

Flink的基于两阶段提交协议的事务数据汇实现

背景 在flink中可以通过使用事务性数据汇实现精准一次的保证&#xff0c;本文基于Kakfa的事务处理来看一下在Flink 内部如何实现基于两阶段提交协议的事务性数据汇. flink kafka事务性数据汇的实现 1。首先在开始进行快照的时候也就是收到checkpoint通知的时候&#xff0c;在…...

树模型(三)决策树

决策树是什么&#xff1f;决策树(decision tree)是一种基本的分类与回归方法。 长方形代表判断模块 (decision block)&#xff0c;椭圆形成代表终止模块(terminating block)&#xff0c;表示已经得出结论&#xff0c;可以终止运行。从判断模块引出的左右箭头称作为分支(branch)…...

vueday01——使用属性绑定+ref属性定位获取id

1.属性绑定&#xff08;Attribute 绑定&#xff09; 第一种写法 <div v-bind:id"refValue"> content </div> 第二种写法&#xff08;省略掉v-bind&#xff09; <div :id"refValue"> content </div> 2.代码展示 <template…...

LeetCode 260. 只出现一次的数字 III:异或

【LetMeFly】260.只出现一次的数字 III 力扣题目链接&#xff1a;https://leetcode.cn/problems/single-number-iii/ 给你一个整数数组 nums&#xff0c;其中恰好有两个元素只出现一次&#xff0c;其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返…...

使用PyTorch解决多分类问题:构建、训练和评估深度学习模型

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…...

基于nodejs+vue网课学习平台

各功能简要描述如下: 1个人信息管理:包括对学生用户、老师和管理员的信息进行录入、修改&#xff0c;以及老师信息的审核等 2在库课程查询:用于学生用户查询相关课程的功能 3在库老师查询:用于学生用户查询相关老师教学的所有课程的功能。 4在库学校查询:用于学生用户查询相关学…...

读书笔记:Effective C++ 2.0 版,条款13(初始化顺序==声明顺序)、条款14(基类有虚析构)

条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同 类成员是按照它们在类里被声明的顺序进行初始化的&#xff0c;和它们在成员初始化列表中列出的顺序没一点关系。 根本原因可能是考虑到内存的分布&#xff0c;按照定义顺序进行排列。 另外&#xff0c;初始化列表…...

flutter开发实战-下拉刷新与上拉加载更多实现

flutter开发实战-下拉刷新与上拉加载更多实现 在开发中经常遇到列表需要下拉刷新与上拉加载更多&#xff0c;这里使用EasyRefresh&#xff0c;版本是3.3.21 一、什么是EasyRefresh EasyRefresh可以在Flutter应用程序上轻松实现下拉刷新和上拉加载。它几乎支持所有Flutter Sc…...

旧手机热点机改造成服务器方案

如果你也跟我一样有这种想法, 那真的太酷了!!! ok,前提是得有root,不然体验大打折扣 目录 目录 1.做一个能爬墙能走百度直连的热点机(做热点机用) 2.做emby视频服务器 3.做文件服务, 存取文件 4.装青龙面板,跑一些定时任务 5.做远程摄像头监控 6.做web服务器 7.内网穿…...

网工实验笔记:策略路由PBR的应用场景

一、概述 PBR&#xff08;Policy-Based Routing&#xff0c;策略路由&#xff09;&#xff1a;PBR使得网络设备不仅能够基于报文的目的IP地址进行数据转发&#xff0c;更能基于其他元素进行数据转发&#xff0c;例如源IP地址、源MAC地址、目的MAC地址、源端口号、目的端口号、…...

webrtc快速入门——使用 WebRTC 拍摄静止的照片

文章目录 使用 getUserMedia() 拍摄静态照片HTML 标记JavaScript 代码初始化startup() 函数获取元素引用获取流媒体 监听视频开始播放处理按钮上的点击包装 startup() 方法 清理照片框从流中捕获帧 例子代码HTML代码CSS代码JavaScript代码 过滤器使用特定设备 使用 getUserMedi…...

预约按摩app软件开发定制足浴SPA上们服务小程序

同城按摩小程序是一种基于地理位置服务的小程序&#xff0c;它可以帮助用户快速找到附近的按摩师&#xff0c;并提供在线预约、评价、支付等功能。用户可以通过手机或者其他移动设备访问同城按摩小程序&#xff0c;实现足不出户就能预约到专业的按摩服务。 一、同城按摩小程序的…...

jenkins出错与恢复

如果你的jenkins出现了如下图所示问题&#xff08;比如不能下载插件&#xff0c;无法保存任务等&#xff09;&#xff0c;这个时候就需要重新安装了。 一、卸载干净jenknis 要彻底卸载 Jenkins&#xff0c;您可以按照以下步骤进行操作&#xff1a; 1、停止 Jenkins 服务&…...

ssh免密登录的原理RSA非对称加密的理解

RSA非对称加密&#xff0c;是采用公钥加密私钥解密的原则。 举个例子SSH的免密登录 SSH免密登录是通过使用公钥加密技术实现的。以下是SSH免密登录的原理&#xff1a; 1. 生成密钥对&#xff1a;首先&#xff0c;在客户端上生成一对密钥&#xff0c;包括一个私钥和一个公钥。私…...

【监督学习】基于合取子句进化算法(CCEA)和析取范式进化算法(DNFEA)解决分类问题(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

力扣每日一题41:缺失的第一个正数

题目描述&#xff1a; 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3示例 2&#xff1a; 输…...

OpenCV与mediapipe实践

1. 安装前准备 开发环境&#xff1a;vscode venv 设置vscode, 建立项目&#xff0c;如: t1/src, 用vscode打开&#xff0c;新建终端Terminal&#xff0c;这时可能会有错误产生&#xff0c;解决办法&#xff1a; 运行命令&#xff1a;Set-ExecutionPolicy -ExecutionPolicy …...

【css拾遗】粘性布局实现有滚动条的情况下,按钮固定在页面底部展示

效果&#xff1a; 滚动条滚动过程中&#xff0c;按钮的位置位于手机的底部 滚动条滚到底部时&#xff0c;按钮的位置正常 这个position:sticky真的好用&#xff0c;我原先的想法是利用滚动条滚动事件去控制&#xff0c;没想到css就可以解决 <template><view class…...

git 创建并配置 GitHub 连接密钥

前记&#xff1a; git svn sourcetree gitee github gitlab gitblit gitbucket gitolite gogs 版本控制 | 仓库管理 ---- 系列工程笔记. Platform&#xff1a;Windows 10 Git version&#xff1a;git version 2.32.0.windows.1 Function&#xff1a; git 创建并配置 GitHub…...

别再手动查字典了!用EggNOG-mapper 5.0一键搞定GO/KEGG/COG注释(附完整流程)

基因功能注释自动化&#xff1a;EggNOG-mapper 5.0实战指南 在基因组学研究中&#xff0c;功能注释是连接序列数据与生物学意义的关键桥梁。传统的手动注释流程往往需要研究人员在多数据库间反复切换&#xff0c;不仅耗时费力&#xff0c;还容易引入人为误差。而EggNOG-mapper…...

照片元数据管理终极指南:3步告别繁琐手动操作

照片元数据管理终极指南&#xff1a;3步告别繁琐手动操作 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 你是否曾因数百张照片的拍摄时间错误而头痛不已&#xff1f;是否在为大量图片添加版权信息时感到力…...

Laravel-Permission性能基准测试:与其他权限包的终极对比分析

Laravel-Permission性能基准测试&#xff1a;与其他权限包的终极对比分析 【免费下载链接】laravel-permission Associate users with roles and permissions 项目地址: https://gitcode.com/gh_mirrors/la/laravel-permission 在构建现代Web应用时&#xff0c;权限管理…...

Java 100 天进阶之路 | 从入门到上岗就业 · 完整目录导航

&#x1f4da; Java 100 天进阶之路 | 从入门到上岗就业 完整目录导航 不背八股文&#xff0c;不堆概念。44篇基础56篇进阶&#xff0c;100天助你达到Java就业水平&#xff0c;从容面对技术面试。 零差评Java教程&#xff0c;从入门到微服务&#xff0c;每篇都有代码、避坑和面…...

Obsidian+Cursor构建AI增强型项目规划与开发一体化工作流

1. 项目概述&#xff1a;构建你的数字项目规划中枢如果你和我一样&#xff0c;同时管理着好几个数字项目——可能是一个新的SaaS产品、一个开源工具&#xff0c;或者一个复杂的个人自动化脚本——你肯定体会过那种信息散落各处的痛苦。产品需求文档在Notion里&#xff0c;技术架…...

基于MCP协议构建技术生态分析工具:架构设计与工程实践

1. 项目概述&#xff1a;一个技术生态分析工具的诞生最近在折腾一个挺有意思的东西&#xff0c;一个叫apifyforge/tech-ecosystem-analysis-mcp的项目。光看这个名字&#xff0c;可能有点唬人&#xff0c;但说白了&#xff0c;它就是一个用来“解剖”技术生态系统的工具。想象一…...

【2024最严苛功能压力测试】:在金融合规文档生成、医疗术语推理、代码安全审计三大高危场景下,Claude与Gemini谁扛住了0误判红线?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;【2024最严苛功能压力测试】&#xff1a;在金融合规文档生成、医疗术语推理、代码安全审计三大高危场景下&#xff0c;Claude与Gemini谁扛住了0误判红线&#xff1f; 测试设计原则 本测试采用“双盲对…...

Arm Forge工具链在HPC中的调试与性能优化实践

1. Arm Forge工具链概述高性能计算(HPC)领域的开发者经常面临并行程序调试和性能优化的挑战。Arm Forge作为一套集成化工具平台&#xff0c;包含了三个核心组件&#xff1a;DDT并行调试器、MAP性能分析器和Performance Reports报告生成工具。这套工具链特别适合处理MPI、OpenMP…...

AI智能体交互体验优化:从对话管理到个性化记忆的工程实践

1. 项目概述&#xff1a;从“Agent Experience”看智能体交互体验的演进最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“agent-experience”&#xff0c;作者是dhruvvsukhadia。光看这个名字&#xff0c;可能很多人会有点懵——这到底是做什么的&#xff1f;是开发AI智能…...

从CANoe实战出发:深度解析UDS网络层诊断中的流控帧(FC)与时间参数STmin

从CANoe实战解析UDS流控帧&#xff1a;FC与STmin参数调优指南 在汽车电子测试领域&#xff0c;UDS诊断协议的网络层流控机制直接影响着ECU通信的可靠性与效率。当测试工程师在CANoe环境中模拟诊断会话时&#xff0c;经常会遇到因流控帧参数配置不当导致的报文丢失、响应超时等问…...