IOS开发学习周报(二)
IOS开发学习周报(二)
简介
课程名称 | IOS开发实训 | 任课老师 | 郑贵锋老师&字节跳动工程师 |
---|---|---|---|
学号 | 16340015 | 专业(方向) | 软件工程(计应) |
姓名 | 陈彬彬 | 944131226@qq.com | |
开始日期 | 2019/03/23 | 完成日期 | 2019/03/28 |
文章目录
- IOS开发学习周报(二)
- 简介
- 本周概括
- 学习记录
- XCode快捷键
- 开发规范
- 工作记录
- 项目要求
- 项目结构
- 文件服务
- UI编程
- 页面跳转
- 项目效果
- 总结
本周概括
- 掌握Xcode下编程的各种快捷键,熟悉系统执行操作和开发步骤。
- 根据模板项目了解一个IOS项目的工程结构、命名规范等
- 完成文件浏览器项目的开发:
- 实现查看路径下的目录与文件对象信息
- 实现点击目录项继续查看修改后的路径下信息
- 实现点击文件项进入文件详情信息界面
学习记录
XCode快捷键
参考博客:
偏好设置+快捷键大全:https://www.cnblogs.com/Zy-iOS-GS/p/6085545.html
14个常用快捷键总结:http://www.cocoachina.com/ios/20151207/14586.html
内容例子:
显示/隐藏导航器面板:Command+0
显示/隐藏实用工具面板:Command+Option+0
查找(替代)文本:Command+(Option)+F
搜索导航器(Find Navigator,也就是搜索):Command+Shift+F
快速打开定位方法: Command + Shift + O
运行app: Command + R
清除工程: Command + Shift + K
构建应用程序: Command + B
快速帮助: 在类或者方法名上执行Command+ Left-click操作
清空控制台:Command + K
开发规范
参考博客:
Object-C开发规范
IOS项目结构规范
工作记录
项目要求
实现一个文件浏览器查阅目录文件:
- 实现查看路径下的目录与文件对象信息
- 实现点击目录项继续查看修改后的路径下信息
- 实现点击文件项进入文件详情信息界面
项目结构
文件服务
实现要求:
- 根据路径获取当前路径下所有目录和文件名信息
- 根据文件名获取文件详情信息
文件相关操作:
关键代码:
- 获取路径下所有目录和文件名信息,去除隐藏文件,然后按照文件夹和文件属性,分成两个
NSMutableArray
// 加载 Data, 方法使用于 ViewDidLoad()中
- (void)loadData {// 获取 NSFileManagerself.fileManager = [NSFileManager defaultManager];// 获取文件路径 dirPathif(self.dirPath == nil) {self.dirPath = @"/Users/chenbb6";}// 获取当前路径下的所有文件与目录信息NSArray *contentList = [self.fileManager contentsOfDirectoryAtPath: self.dirPath error: nil];// 过滤隐藏文件,分层文件与文件文件夹self.fileList = [NSMutableArray array];self.folderList = [NSMutableArray array];for (NSString *name in contentList) {if ([name hasPrefix:@"."]) {continue;}// 根据 dirPath + name 获得文件/文件夹全目录NSString *path = [self.dirPath stringByAppendingPathComponent:name];BOOL isDirectory = NO;// 判断全目录是文件还是文件夹[self.fileManager fileExistsAtPath:path isDirectory:&isDirectory];if(isDirectory) {[self.folderList addObject:name];}else {[self.fileList addObject:name];}}
}
- 获取绝对路径下文件名对应的详情信息
// 加载 Data, 方法使用于 ViewDidLoad()中
// self.fileAttr.allKeys 获取详情键值队列
// self.fileAttr.allValues 获取详情信息队列
- (void)loadData {NSLog(@"loaddata");self.fileManager = [NSFileManager defaultManager];self.fileAttr = [self.fileManager attributesOfItemAtPath:self.fileDir error:nil];
}
UI编程
实现效果:
主要使用控件:
UITableView
UITableView有两种样式:
- UITableViewStyleGrouped
- UITableViewStylePlain
UILable
UIImageView
关键代码:
以 FileListViewController
类展示路径下信息类为例:
- 定义类,使用
UITableView
,实现两个protocol
协议,UITableViewDelegate
,UITableViewDataSource
:
@interface FileListViewController ()<UITableViewDelegate, UITableViewDataSource>@property(nonatomic, strong) UITableView *tableView;
@property(nonatomic, strong) NSFileManager *fileManager;
@property(nonatomic, strong) NSString *dirPath;
@property(nonatomic, strong) NSMutableArray<NSString *> *fileList;
@property(nonatomic, strong) NSMutableArray<NSString *> *folderList;@end
viewDidLoad() 中 加载 SubView
// 重写 ViewDidLoad 函数,加载 SubView 和 Data
- (void)viewDidLoad {[super viewDidLoad];[self loadData];[self loadSubView];
}
// 加载 SubView
- (void)loadSubView {self.title = @"首页";self.navigationItem.title = @"首页";self.tableView = ({UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];tableView.delegate = self;tableView.dataSource = self;tableView;});[self.view addSubview:self.tableView];
}
- 实现
UITableViewDataSource
协议内函数,绑定数据源
// 返回TableView中一共有几个分区
// 这里将路径下对象信息分成了文件夹队列和文件队列两个分区
- (NSInteger) numberOfSectionsInTableView:(UITableView *) tableView {return 2;
}
// 返回对应分区下的TableView行数
// 这里对应返回相应数据队列中的count数量
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {// folderListif(section == 0) {return self.folderList.count;}// fileListreturn self.fileList.count;
}
// 返回TableView下每个Cell的样式
// (相当于安卓RecyclerView内Item的样式定义)
// 同样分成两种情况,图片区分两种分区,文本显示目录或文件名
- (UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {NSString * cellID = [NSString stringWithFormat:@"cellID:%zd", indexPath.section];UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];if(nil == cell) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: cellID];}// folderListif(indexPath.section == 0) {cell.textLabel.text = self.folderList[indexPath.row];cell.imageView.image = [UIImage imageNamed:@"folder.jpg"];cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;}// fileListelse {cell.textLabel.text = self.fileList[indexPath.row];cell.imageView.image = [UIImage imageNamed:@"file.png"];cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;}return cell;
}
- 实现
UITableViewDelegate
协议内函数,实现点击TableView中Cell的响应。具体看下一部分“页面跳转”
页面跳转
Main.storyboard 操作 :
- 添加
Navigation Controller
- 建立新的
Tab Bar Controller -> Navigation Controller -> Root View Controller
的连接关系 delete
键两次删除连线关系,win
键盘ctrl + left click
拖动建立新的连线关系
【动图】简单展示操作流程
关键代码:
以 FileListViewController
类为例:
点击目录文件,跳转到一个新的 FileListViewController
界面
点击文件,跳转到文件信息详情 FileInfoViewController
界面
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {[tableView deselectRowAtIndexPath:indexPath animated:YES];// folderListif(indexPath.section == 0) {NSString *path = [self.dirPath stringByAppendingPathComponent:self.folderList[indexPath.row]];FileListViewController *controller = [[FileListViewController alloc] initWithDirPath:path];controller.hidesBottomBarWhenPushed = YES;[self.navigationController pushViewController:controller animated:YES];}// fileListelse {NSString *fileDir = [self.dirPath stringByAppendingPathComponent:self.fileList[indexPath.row]];SecondViewController *controller = [[FileInfoViewController alloc] initWithFileDir:fileDir];controller.hidesBottomBarWhenPushed = YES;[self.navigationController pushViewController:controller animated:YES];}
}
项目效果
【动图】虚拟机+模拟器运行:比较卡顿
总结
这一周IOS学得就更加充实了,比起上一周,这周的讲课节奏速度还要更加快一点,很快地就讲完了基础的UI设计,基础的网络访问和简单的文件存储,比安卓开发课程的节奏要快很多。
同样比较郁闷的还是设备问题,这周开始在自己电脑上用VMware装Mac OS的虚拟机,虽然解决了能随时使用设备的问题,但是很糟糕的一点是,虚拟机太卡了,开机5分钟,还要在虚拟机中用模拟器模拟苹果手机应用运行的情况,实在是让人有点受不了。
这周收获也很大,至少自己也开始了第一个IOS的项目,涉及到了UI编程、文件服务、页面跳转等知识点,还是有一定难度的,不过感觉可以使用纯代码的方式去完成页面跳转,而不需要去手动调整 Main.storyboard, 总觉得这不符合规范,后续还要再深入理解一下 UITabBarController
,UINavigationController
,UIViewController
之间的联系与作用。
IOS开发学习周报(二)相关推荐
- IOS开发学习周报(一)
IOS开发学习周报(一) 学习记录 概括 熟悉在Mac OS下的开发操作,熟悉系统操作.了解相关快捷键以及触摸板快捷操作以便提高后续开发效率. 学习Objective-C相关语法,实操完成螺旋矩阵的算 ...
- iOS开发学习笔记二:UITableView(1)
一:TableViewController 1:删掉默认的ViewController 拖动一个TableViewController 2:新建一个Cocoa Touch Class,命名为:Tabl ...
- ios开发学习笔记--Core Motion
iOS开发学习笔记之CoreMotion-运动传感器 官网文档:CoreMotion Framework Reference 一. 简介 现在的苹果手机都基本有运动传感器,能够过获取到设备的加 ...
- iOS开发学习48 OC的lambda block
iOS开发学习48 lambda表达式 一.block 简介 二.block使用 1. block的写法大概就是这样: 2. 带参数的话可以这样写: 3. 如果不写入参,可以写: 4. 当然返回也可以 ...
- iOS开发-定制多样式二维码
iOS开发-定制多样式二维码 二维码/条形码是按照某种特定的几何图形按一定规律在平台(一维/二维方向上)分布的黑白相间的图形纪录符号信息.使用若干个与二进制对应的几何形体来表示文字数值信息. 最常 ...
- ios开发学习-手势交互(Gesture)效果源码分享
qianqianlianmeng ios开发学习-手势交互(Gesture)效果源码分享 All Around Pull View 介绍:实现视图四个方向(上下左右)都能够拖动更新(pull to r ...
- IOS开发学习笔记-----UILabel 详解
IOS开发学习笔记-----UILabel 详解 01 //创建uilabel 02 UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMa ...
- IOS开发学习笔记(一)
概述: iOS是苹果开发的手持设备操作系统(iPhone,iPad,iPod touch,iPad mini). 基于UNIX,层次架构:核心操作系统层(Core OS)-> 核心服务层(Cor ...
- [IOS] iOS开发学习的站点
iOS开发学习的好站点,纪录在此. http://www.cocoachina.com/ 适合iOS学习入门 开发者中心的内容适合开发时参考 http://code4app.com/ 大量iOS源码 ...
最新文章
- spring boot配置写法
- C#多线程学习之(五)使用定时器进行多线程的自动管理
- python绘制折线图怎么样填充空白颜色_Python:填补两幅图之间的空白
- Django(part42)--限制IP请求次数
- hive 结构metastone_深入理解hive之事务处理
- 编程之美-2.17-数组循环移位
- [转载] C Primer Plus 第6章 C控制语句 6.16 编程练习及答案
- pl/sql developer 设置oracle的date类型默认显示样式
- python中︿是什么意思_Python learning notes-0003-注释、变量、简单类型、运算符,学习,笔记...
- Ubuntu16.04安装ROS Kinetic详细过程
- JVM监控及诊断工具GUI篇之Eclipse MAT
- Linux重定向和管道的基础学习
- 华为服务器SNMP协议怎么修改,华为迈普交换机、瑞斯康达SNMP协议配置方法
- mysql自定义函数for循环_mysql自定义函数
- android新手上路 一
- 基于Qt的学生信息管理系统
- PLC可编程控制器、单片机开发应用及变频调速综合实训装置
- border-color属性设置单边边框和综合四边边框颜色
- How to manually generate ssl certificate for own site in Linux
- 基于ChatGPT制作的一款英语口语练习应用SpokenAi