IOS开发学习周报(二)

简介

课程名称 IOS开发实训 任课老师 郑贵锋老师&字节跳动工程师
学号 16340015 专业(方向) 软件工程(计应)
姓名 陈彬彬 Email 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, 总觉得这不符合规范,后续还要再深入理解一下 UITabBarControllerUINavigationControllerUIViewController 之间的联系与作用。

IOS开发学习周报(二)相关推荐

  1. IOS开发学习周报(一)

    IOS开发学习周报(一) 学习记录 概括 熟悉在Mac OS下的开发操作,熟悉系统操作.了解相关快捷键以及触摸板快捷操作以便提高后续开发效率. 学习Objective-C相关语法,实操完成螺旋矩阵的算 ...

  2. iOS开发学习笔记二:UITableView(1)

    一:TableViewController 1:删掉默认的ViewController 拖动一个TableViewController 2:新建一个Cocoa Touch Class,命名为:Tabl ...

  3. ios开发学习笔记--Core Motion

    iOS开发学习笔记之CoreMotion-运动传感器 官网文档:CoreMotion Framework Reference 一.     简介 现在的苹果手机都基本有运动传感器,能够过获取到设备的加 ...

  4. iOS开发学习48 OC的lambda block

    iOS开发学习48 lambda表达式 一.block 简介 二.block使用 1. block的写法大概就是这样: 2. 带参数的话可以这样写: 3. 如果不写入参,可以写: 4. 当然返回也可以 ...

  5. iOS开发-定制多样式二维码

    iOS开发-定制多样式二维码   二维码/条形码是按照某种特定的几何图形按一定规律在平台(一维/二维方向上)分布的黑白相间的图形纪录符号信息.使用若干个与二进制对应的几何形体来表示文字数值信息. 最常 ...

  6. ios开发学习-手势交互(Gesture)效果源码分享

    qianqianlianmeng ios开发学习-手势交互(Gesture)效果源码分享 All Around Pull View 介绍:实现视图四个方向(上下左右)都能够拖动更新(pull to r ...

  7. IOS开发学习笔记-----UILabel 详解

    IOS开发学习笔记-----UILabel 详解 01 //创建uilabel 02 UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMa ...

  8. IOS开发学习笔记(一)

    概述: iOS是苹果开发的手持设备操作系统(iPhone,iPad,iPod touch,iPad mini). 基于UNIX,层次架构:核心操作系统层(Core OS)-> 核心服务层(Cor ...

  9. [IOS] iOS开发学习的站点

    iOS开发学习的好站点,纪录在此. http://www.cocoachina.com/ 适合iOS学习入门 开发者中心的内容适合开发时参考 http://code4app.com/ 大量iOS源码 ...

最新文章

  1. spring boot配置写法
  2. C#多线程学习之(五)使用定时器进行多线程的自动管理
  3. python绘制折线图怎么样填充空白颜色_Python:填补两幅图之间的空白
  4. Django(part42)--限制IP请求次数
  5. hive 结构metastone_深入理解hive之事务处理
  6. 编程之美-2.17-数组循环移位
  7. [转载] C Primer Plus 第6章 C控制语句 6.16 编程练习及答案
  8. pl/sql developer 设置oracle的date类型默认显示样式
  9. python中︿是什么意思_Python learning notes-0003-注释、变量、简单类型、运算符,学习,笔记...
  10. Ubuntu16.04安装ROS Kinetic详细过程
  11. JVM监控及诊断工具GUI篇之Eclipse MAT
  12. Linux重定向和管道的基础学习
  13. 华为服务器SNMP协议怎么修改,华为迈普交换机、瑞斯康达SNMP协议配置方法
  14. mysql自定义函数for循环_mysql自定义函数
  15. android新手上路 一
  16. 基于Qt的学生信息管理系统
  17. PLC可编程控制器、单片机开发应用及变频调速综合实训装置
  18. border-color属性设置单边边框和综合四边边框颜色
  19. How to manually generate ssl certificate for own site in Linux
  20. 基于ChatGPT制作的一款英语口语练习应用SpokenAi

热门文章

  1. 视频在html不能播放器,网页无插件直播H265编码视频播放器EasyPlayer网页播放器不能播放怎么处理?...
  2. outlook邮件开发开发HTML,CSS标签及样式失效总结
  3. diea社区版如何创建springboot
  4. table隐藏列与colgroup标签
  5. 怎么把科学计算机的fix弄掉,如何消除计算器上的FIX功能
  6. 1062 最简分数(JAVA)
  7. 英文写作中注意的问题——想到哪里记哪里
  8. 蓝绿发布,红黑发布和灰度发布是什么
  9. 高通骁龙865之camera性能深度分析(一)
  10. 打印订单--bcty365