IOS 递归实现文件管理器的小例子

浅谈iOS爬虫 众所周知网络爬虫是一种自动获取网页内容的程序,是搜索引擎的重要组成部分,核心算法就是递归。 小白学iOS开发两个月左右,技术境界有限,望谅解!今天跟大家分享一下关于iOS爬虫的一些理解,以获取图片资源为例: 大致思路:首先要获取某一目录或文件夹的路径(根目录之类的),以此位置开始逐级递归遍历,遇到图片就复制图片到某一文件夹中,遇到文件夹就继续递归遍历直至遍历结束。 创建项目 略写 // 模 阅读详情

1.文件管理器的解决方案:

2.创建一个UITABLEVIEWCONTROLLER的tableviewcontroller的文件:对页面进行关联, ceLL标识关 联;

3.需要在布局的时候关联一下 显示一个删除的按钮   用Navigation。

4.设置一个访问文件的路径。根目录   这样你可以继续打开它下层的东西     ;获取这个文件夹下所有路径的内容:就是刚才定义的

[selffindFileInDirecotryPath:@"/Users/bmuyu/Desktop"];

5.获取文件夹下层内容: 即用数组遍历的形式获取文件的名称:

for (NSString *fileName in fileNames) {

 NSString *filePath = [path stringByAppendingPathComponent:fileName];得到完整路径!

6.得到完整路径后,要显示到TableView中需要添加数组,  用数组之前切记要初始化(数据源数组)

7.将数据加到数据源数组中,  将pathName放到数据源数组:pathnames里,数据源数组就有数据了。就能用了

8.数据元数组有数据了,但是得在cell中显示,所以需要returnself.filePaths.count;

9.下一步cell每行显示的内容:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath

{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"forIndexPath:indexPath];

    

    NSString *filePath = self.filePaths[indexPath.row];

    

    cell.textLabel.text =[filePath lastPathComponent]; //此句话的意思就是不想看见全部路径,只看末尾的路径显示出来如图11

10.这些做完以后,画面中会显示路径,但也会显示出隐藏文件: 就是带"."的文件。如果不想看见的话  就在遍历数组的时候进行判断

for (NSString *fileName in fileNames) {

        if ([fileName hasPrefix:@"."]) {

            continue;

        }

        NSString *filePath =[path stringByAppendingPathComponent:fileName];

        [self.filePathsaddObject:filePath];

如果前面带点的话 就跳出本次循环 继续下次循环。

11.如果我不想看到完整的路径:如图  需要做什么改变呢

12.cell.textLabel.text =[filePath lastPathComponent];//此句话的意思就是不想看见全部路径,只看末尾的路径显示出来如图11

  1.  就显示出来了:那么 下一个需求就是:当 是文件夹的情况,右侧显示一个右箭头,作为跳转的(文件/文件夹的区分):
  2. 创建一个方法:实现判断是否是文件夹:

-(BOOL)isDirecotryWithPath:(NSString *)path{

    

    NSFileManager *fm = [NSFileManagerdefaultManager];

    BOOL isDir = NO;

    if ([fm fileExistsAtPath:path isDirectory:&isDir]&&isDir) {

        returnYES;

    }

    

    returnNO;

}

 //如果是文件夹再右侧添加右箭头

    if ([selfisDirecotryWithPath:filePath]) {

          [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];

        

        cell.imageView.image = [UIImageimageNamed:@"directory.png"];

        

    }else{//如果不是文件夹要把右箭头去掉  避免复用时出问题

        [cell setAccessoryType:UITableViewCellAccessoryNone];

如果不是文件夹的话  如果出去一个Cell(可能是有箭头的) 下面新刷新的可能出现服用的情况,会出现服用很多次的情况出现问题

  1. 现在出现的情况是 显示是可以显示出来了:但是没有图片,没有跳转, 所以现在需要加点击事件 didselect  deq那个东西该上场了!
  2. Cell点击事件的代码需要自己写:下面是代码    点击事件后需要进行跳转页面,因为不法知道页面的数量,也不可能在页面中创建出来

所以需要页面复用!!!

17.跳转页面后遇到的情况是:   首先需要在当前的页面中创建出新的页面,但是!!创建出来的页面需要你传递参数,所以你的参数值需要变

否则就会出现,你点击多少次,都是和上一个页面相同页面的效果!!  所以这时候需要在进行一次路径的修改,声明一个新的参数用来保存路径

然后判断页面是否存在第一次加载的情况:  如果是第一次加载就默认为根目录的路径;如果不是,就赋值给一个新的路径!

还有个情况就是,如果不是文件夹是不需要跳转的。是文件夹就需要跳转

以下是程序的相关代码:很重要!!!   

//判断是否是文件夹,是就跳转

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{

    

    NSString *filePath = self.filePaths[indexPath.row];

    

    if ([selfisDirecotryWithPath:filePath]) {//是文件夹

        //跳转页面

        TableViewController*vc = [self.storyboardinstantiateViewControllerWithIdentifier:@"TableViewController"];

        vc.directoryPath =filePath;

        [self.navigationControllerpushViewController:vc animated:YES];

 

- (void)viewDidLoad

{

    [superviewDidLoad];

    self.filePaths = [NSMutableArrayarray];

    self.navigationItem.rightBarButtonItem = self.editButtonItem;

    //如果是第一次

    if (!self.directoryPath) {

        self.directoryPath = @"/Users/";

    }

    

    self.title =  [self.directoryPathlastPathComponent];  //当前文件夹的名称显示出来

    

    NSString *path = self.directoryPath;

  1. 以上代码的基本功能就基本实现了文本编辑器的大部分功能:剩余功能就是  如果是文件夹显示文件夹图片,其它。。 查看文本可以看

 //如果是文件夹再右侧添加右箭头

    if ([selfisDirecotryWithPath:filePath]) {

          [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];

        

        cell.imageView.image = [UIImageimageNamed:@"directory.png"];

        

    }else{//如果不是文件夹要把右箭头去掉  避免复用时出问题

        [cell setAccessoryType:UITableViewCellAccessoryNone];

        if ([filePath hasSuffix:@"txt"]||[filePathhasSuffix:@"rtf"]||[filePathhasSuffix:@"h"]||[filePathhasSuffix:@"m"]) {

            cell.imageView.image = [UIImageimageNamed:@"txt.png"];

        }elseif ([filePath hasSuffix:@"jpg"]||[filePathhasSuffix:@"png"]){

           //直接加载绝对路径的图片

            cell.imageView.image = [UIImageimageWithContentsOfFile:filePath];

        }else{//其它格式的文件

            cell.imageView.image = [UIImageimageNamed:@"other.png"];

            

        }

    }

    return cell;

(BOOL)isDirecotryWithPath:(NSString *)path{

    

    NSFileManager *fm = [NSFileManagerdefaultManager];

    

    BOOL isDir = NO;

    if ([fm fileExistsAtPath:path isDirectory:&isDir]&&isDir) {

        returnYES;

    }

    

    returnNO;

}

 

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{

    

    NSString *filePath = self.filePaths[indexPath.row];

    

    if ([selfisDirecotryWithPath:filePath]) {//是文件夹

        //跳转页面

        TableViewController*vc = [self.storyboardinstantiateViewControllerWithIdentifier:@"TableViewController"];

        vc.directoryPath =filePath;

        [self.navigationControllerpushViewController:vc animated:YES];

        

    }else{//如果不是文件夹

        if ([filePath hasSuffix:@"txt"]||[filePathhasSuffix:@"rtf"]||[filePathhasSuffix:@"h"]||[filePathhasSuffix:@"m"]) {

           //创建一个页面里面显示一个textView在tv里显示文本

            UIViewController *vc =[[UIViewControlleralloc]init];

            UITextView *tv = [[UITextViewalloc]initWithFrame:vc.view.bounds];

            [vc.viewaddSubview:tv];

            vc.view.backgroundColor = [UIColorwhiteColor];

            tv.text = [NSStringstringWithContentsOfFile:filePathencoding:NSUTF8StringEncodingerror:nil];

            [self.navigationControllerpushViewController:vc animated:YES];

            

            

            

        }elseif ([filePath hasSuffix:@"jpg"]||[filePathhasSuffix:@"png"]){

            UIViewController *vc =[[UIViewControlleralloc]init];

            UIImageView *iv = [[UIImageViewalloc]initWithFrame:vc.view.bounds];

            [vc.viewaddSubview:iv];

            iv.image = [UIImageimageWithContentsOfFile:filePath];

            

            [self.navigationControllerpushViewController:vc animated:YES];

            

        }else{//其它格式的文件

          

           UIAlertView *alertView = [[UIAlertViewalloc]initWithTitle:@"提示"message:@"此版本暂不支持此格式,请期待下一版本!呵呵" delegate:selfcancelButtonTitle:@"取消"otherButtonTitles:@"确定", nil];

            [alertView show];

            

        }

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

{

    if (editingStyle == UITableViewCellEditingStyleDelete) {

        NSString *filePath = self.filePaths[indexPath.row];

        [[NSFileManagerdefaultManager] removeItemAtPath:filePatherror:nil];

        

        

        [self.filePathsremoveObjectAtIndex:indexPath.row];

        

        

        [tableView deleteRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationFade];

    } elseif (editingStyle == UITableViewCellEditingStyleInsert) {

        // Create a new instance of the appropriate class, insertit into the array, and add a new row to the table view

    }   

别再只用TreeView了!用Godot 4.2的Tree控件打造一个可拖拽、多列、带图标的文件管理器(附完整源码) 本文详细介绍了如何利用Godot 4.2的Tree控件构建一个功能丰富的文件管理器,包括多列展示、图标管理、拖拽操作等高级功能。通过完整的源码示例,开发者可以学习如何实现动态加载文件系统、右键菜单和性能优化技巧,提升Godot项目的UI交互体验。 阅读详情

相关推荐

Nemo vs Nautilus深度对比:为什么我在Ubuntu 20.04放弃了默认文件管理器?

本文深度对比了Ubuntu 20.04下的Nemo与Nautilus文件管理器,重点解析Nemo如何通过分屏浏览、类型搜索等特性显著提升文件管理效率。实测显示Nemo在大目录操作中性能提升30%-50%,特别适合开发者处理多项目和数据密集型任务。文章还提供了详细的安装配置指南和优化技巧,帮助用户从Nautilus平滑迁移到Nemo。

weixin_30642561的博客 82

iOS(Object C) 递归方法求和

iOS(Object C) 递归方法求和

wyz670083956的博客 661

Qt文件管理器实战:QFileSystemModel与QTreeView工程解析

在桌面应用开发中,文件系统操作是常见需求,Qt框架通过模型视图架构提供了高效解决方案。QFileSystemModel作为核心模型类,将本地文件系统映射为树形结构,配合QTreeView实现目录浏览,无需手动递归遍历。其技术价值在于简化开发流程,提升代码可维护性,适用于文件管理工具、IDE资源管理器等场景。本文以简易文件管理器为例,深入解析QFileSystemModel与QTreeView的配合逻辑,涵盖工程结构、编译运行及常见问题排查,帮助开发者快速掌握Qt文件系统操作。

weixin_28718769的博客 290

iOS 算法之排序、查找、递归

排序 冒泡排序(依次循环旁边的比较放到后边去) /** 最好时间复杂度是O(n) 最坏时间复杂度是O(n^2) 平均时间复杂度:O(n^2) 平均空间复杂度:O(1) */ - (void)foolSortArray:(NSMutableArray *)array { for (int i = 0; i < array.count-1; i++) { f...

weixin_34357267的博客 399

IOS 下实现文件管理器

IOS 下实现文件管理器!可以新建,删除,复制,编辑-IOS achieved under file manager!

iOS面试题经典汇总

iOS面试题经典汇总,包含iOS各个模块内容的介绍。

IOS路径沙盒文件管理

iOS路径沙盒文件管理,有需要的朋友可以参考下。 一、iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立、封闭、安全的空间,叫做沙盒。它一般存放着程序包文件(可执行文件)、图片、音频、视频、plist文件、sqlite数据库以及其他文件。 每个应用程序都有自己的独立的存储空间(沙盒) 一般来说应用程序之间是不可以互相访问 ...

weixin_33836223的博客 178

ios使用OC写算法之递归实现八皇后

本篇文章主要介绍了ios使用OC写算法之递归实现八皇后,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

iOS开发第五周学习

定义函数使用关键字func。定义函数可以指定一个或多个输入参数和一个返回值类型。每个函数都有一个函数名来描述它的功能。//函数名要有意义func 函数名(形参) -> 返回类型{return 形参。

yuan_050905的博客 212

Linux yum源配置以及yum命令讲解

前面为大家介绍了RPM二进制包安装软件,RPM包安装的最大的缺点也提到过,就是依赖性太强,一旦遇到依赖问题,则需要我们手动解决包之间具有依赖性的问题,今天为大家介绍一种可自动解决包之间依赖关系的安装方式:yum。 yum 全称“Yellow dog Updater, Modified”,是一个专门为了解决包的依赖关系而存在的软件包管理器。就好像 Windows 系统上我们通常可以通过各种软件管家实现软件的一键安装、升级和卸载,yum就是Linux 系统中的一键安装工具。yum 解决依赖关系的基本逻辑是:yu

九派Linux的博客 2283

系统安装、qt配置、安装pcie驱动

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 安装Linux系统指定:ununtu20.04并配置相关软件环境 前言 提示:这里可以添加本文要记录的大概内容: ununtu20.04、Qt 5.9.0、pcie驱动 提示:以下是本篇文章正文内容,下面案例可供参考 一、安装系统 制作系统盘(win10),在开机时按相应键进入BIOS,(华硕需要先改配置启动->CSM->开启->第一个选项选第一个或第二个),等待即可 进入后按照https://www.sysgeek.

weixin_44832804的博客 2206

IOS - 递归

递归 递归的理解就是自己调用自己,C#中也是这么理解的,将满足的条件返回,不满足的时候自己调用自己 object-c: - (int)sum:(int)num{   if(num == 0){     return num;   }   return num + [self sum:num - 1]; } 递归:   1. 有一个明确的出口   2.不满足条件的时...

weixin_33918357的博客 366

学好超几何分布的核心公式,破解双色球!

彩票本质是概率游戏,不存在"必中公式"科学投注的核心是风险收益比管理长期投注的期望值始终为负(理论回报率约47%-63%)数学维度:运用概率工具优化策略经济维度:控制投注成本在可承受范围人文维度:将彩票视为社会公益的参与方式通过本文构建的数学模型,彩民可以在概率框架内实现更理性的投注决策。但最终能否收获幸运,仍取决于那个永恒的未知数——概率女神的眷顾。一、超几何分布的核心公式。

weixin_44904675的博客 1万+

蓝懿iOS培训日志11 递归

今天讲的文件管理器 递归 递归就是方法调用自身 简单几行代码功能却非常强悍。 //判断是否是文件夹 BOOL isDir = NO; NSFileManager *fm = [NSFileManager defaultManager]; if ([fm fileExistsAtPath:filePath isDirectory:&isDir]&&am...

weixin_30239339的博客 70

VSCode + QMT 量化交易完整解决方案!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1327

【光子 AI】AI Agent 知识体系深度研究报告

从理论基础到前沿应用:全面解析人工智能代理的核心架构、关键技术与发展趋势📅 2026 年 3 月 | 📊 深度研究报告 | 🔬 人工智能领域 | 📈 前沿技术分析**AI Agent(人工智能代理)**是一种能够感知环境、基于所获得的信息做出决策,并执行行动以影响该环境的软件系统。AI Agent 的设计旨在模仿或实现智能行为,它们可以在各种环境中操作,包括物理世界和虚拟空间。随着大语言模型(LLM)技术的突破性进展,AI Agent 正从实验室研究快速走向产业应用。根据 Gartner 发布的《2

AI天才研究院 179

别再只会遍历了!用QTreeView+QStandardItemModel实现文件管理器(含右键菜单和搜索)

本文详细介绍了如何使用QTreeView和QStandardItemModel构建高交互性的文件管理器,涵盖目录浏览、右键菜单、实时搜索等核心功能。通过自定义模型和节点操作,开发者可以灵活控制文件系统的展示与交互,提升Qt应用程序的用户体验。文章还提供了性能优化技巧和高级功能扩展方案,适合需要深度定制文件管理功能的开发者参考。

weixin_30376509的博客 262

嵌入式工程师必学(118):MCU的硬件定时器和中断

大多数微处理器都有一个或多个可编程硬件定时器,这些定时器包括对中断的支持。可以有不同类型的计时器,用于不同的应用程序。例如,LPC1768 具有四个 32 位通用定时器、一个看门狗定时器、一个重复中断定时器、一个系统滴答定时器、一个正交编码器接口、6 个 PWM 输出和一个支持中断的实时时钟。硬件定时器用于计时和计数作,允许处理器在 timer 进程运行时继续执行其他进程。硬件定时器是一种使用 clock 信号来增加 register 的电路。

码农17年的博客 211

【desalbres】使用MVC3和jsTree实现的简单文件管理器

我在网上见过几篇关于MVC和jsTree的好教程,但是它们多少有些过时了,不适用于jsTree的最新版本(它是免费的)。我想把我使用jsTree的经验发上来有一段时间了(对于不知道什么是jsTree的朋友,请来这看看:www.jsTree.com)。还有什么比通过实现一个简单的文件管理器更好的分享这些经验呢? 在这篇文章里,我将关注jsTree两方面的问题。首先是挺打击我的是通过插话移动树结点

2138

基于深度学习的心律失常的自动分类

基于深度学习的心律失常的自动分类 作者:禅与计算机程序设计艺术 1. 背景介绍 1.1 心律失常的危害与检测的重要性 心律失常是一种常见的心血管疾病,严重威胁着人们的健康和生命。据统计,全球每年有数百万人因心律失

AI架构师小马 1146

解锁PyCharm+Deepseek:本地部署AI编程超能力

在本次探索中,我们成功地在 PyCharm 中实现了 DeepSeek 的本地化部署,这一过程虽然涉及多个步骤,但每一步都为我们开启 AI 编程大门奠定了基础。从安装最新版 PyCharm,确保我们拥有一个功能强大且兼容性良好的开发环境,到注册 DeepSeek 账号并获取 API Key,这是连接我们与强大 AI 能力的关键纽带。接着,在 PyCharm 中安装 Continue 插件并进行精细配置,让 DeepSeek 能够深度融入我们的编程流程。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 5550

终极Nuklear文件管理器教程:3小时从零构建跨平台GUI应用

想要快速掌握轻量级GUI开发?Nuklear作为一款单头文件ANSI C即时模式跨平台GUI库,让初学者也能在短时间内构建出功能完整的文件管理器。本文将通过详细的步骤指南,带你从零开始,在3小时内完成一个跨平台文件浏览器的开发。🚀 ## 为什么选择Nuklear开发文件管理器? Nuklear GUI库以其极简的设计理念脱颖而出,**单头文件**的特性意味着你只需包含一个头文件即可开始开发。

gitblog_01122的博客 736

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

google_sign_in_ios:Flutter 官方 iOS 端 Google 登录联邦插件实现详解

本文以 [google_sign_in_ios/README.md](https://link.gitcode.com/i/7e783fe8cb2d0891da94c71cde06c348) 为核心骨架,结合其源码、Podspec 与示例工程,系统讲解该插件在 Flutter 官方 plugins 仓库中的定位、iOS 平台的接入配置、Dart 层与原生层的协作原理。读完你将掌握如何在 Flutt

gitblog_01052的博客 308

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

推荐一款高效能的iOS开发工具:ZKTreeTableView

推荐一款高效能的iOS开发工具:ZKTreeTableView 在iOS应用开发中,数据展示是不可或缺的一部分,尤其在处理层级结构数据时,如文件系统、组织架构等。今天要向大家推荐的是一个强大的开源项目——,它是一个专门用于构建树形表格视图的库,为开发者提供了一种优雅的方式来处理和展现层次化数据。 项目简介 ZKTreeTableView 是由开发者 bestDew 创作的一个Swift框架,适用于...

gitblog_00061的博客 301
上一篇: IOS 递归简单使用及相关操作
下一篇: IOS tableView下拉刷新,上拉刷新(LOW)
NameUseNsstring
博客等级 码龄11年 1粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值