易聊之文件界面的构思


第二遍,易聊 之文件界面的架构

1. 通过 tabbar 的视图控制器导航来到主页面

两个数据源数组,通过 segmentControl 进行切换 

1.  scrollView  与 segment  绑定到一块, scrollView 的大小是 contentCGsize = CGSizeMake (320 *2, 480-64-49);



#pragma mark--1.橘黄色 2. 黑色  --为啥黑色(_scrollView添加的是collection.view,所以要看collection.view)

            

          //  [_bgScro addSubview:vc.view];




2. 数据源是通过集成表实现的,  自定义 UICollectionViewController  ,并初始化时,加上数据源数组

-(id)initWithArr:(NSMutableArray *)arr layout:(UICollectionViewFlowLayout *)layout

{

    self =[super initWithCollectionViewLayout:layout];

    if (self) {

        

        _totalArr = arr;

    }

    

    return self;

}

,这个数组通过三木运算符方式传递过去,

CollectionVC * collection = [[CollectionVC alloc]initWithArr:i?_pubArr:_perArr layout:flowLayOut]; 这样把数据源数组从 FileVC界面传递到UICollectionViewController里面,

3. 自定义UICollectionViewCell  在自定义 UICollectionViewController里进行 注册,



4.自定义按钮里  ------让按钮点击改变状态

#import <UIKit/UIKit.h>


typedef NS_ENUM(NSInteger, ButtonState)

{// Button 的四种状态

    ButtonStateNormal,//下载

    ButtonStateDowning,//正在下载

    ButtonStatePause,//暂停

    ButtonStateComplete,//查看

    

};


@interface Btn : UIButton


//做一下记录,当前的 button 状态

@property(nonatomic,assign)ButtonState currentBut;


@end


5.回到 cell.customBtn 里,点击按钮时,绑定的方法

这里

-(void)btnClick:(Btn *)btn

{

    

    switch (btn.currentBtn) {

        case ButtonStateNormal:

            //点击后,开始下载

            btn.currentBtn = ButtonStateDowning;

            

            break;

        case ButtonStateDowning:

            //点击后,暂停

            btn.currentBtn = ButtonStatePause;

            

            break;

        case ButtonStatePause:

            //点击后,继续下载

            btn.currentBtn = ButtonStateDowning;

            

            break;

        case ButtonStateComplete:

            //点击后查看,跳转页面

#warning mark--赋值完毕重写 set 方法,因为描述了,(set get 方法)(取值是get方法)

            

            break;

    

        default:

            break;

    }

    

}

6. 返回到自定义按钮里,重写 set 方法

//重写 set方法

-(void)setCurrentBtn:(ButtonState)currentBtn

{

    switch (currentBtn) {

        case ButtonStateNormal:

 //改变标题

            [self setTitle:@"下载" forState: UIControlStateNormal];

            

            break;

        case ButtonStateDowning:

            //改变标题

            [self setTitle:@"正在下载" forState: UIControlStateNormal];

            

            break;

        case ButtonStatePause:

            //改变标题

            [self setTitle:@"暂停" forState: UIControlStateNormal];

            

            break;

        case ButtonStateComplete:

            //改变标题

            [self setTitle:@"查看" forState: UIControlStateNormal];

            

            break;


        default:

            break;

    }

}

#####此时运行后 点击按钮后,再次点击, button 状态不改变,  少一句话

_currentBtn = currentBtn;   把改变的 button 状态再传过去,


7.bbb

点击 下载按钮 开始下载文件

//下载文件---(下载文件是根据--资源路径url进行下载的)

//需要注意,创建下载文件的路径


-(void)downloadWithUrl:(NSString *)urlStr Name:(NSString *)name

{

  //1.创建请求的对象

    NSURL * url = [NSURL URLWithString:urlStr];

    

   //2.设置下载文件 保存的路径

    

    [self createPath];//先做判断,再创建二级目录

    

    //开始创建一级目录

    NSString * downPath = [NSHomeDirectory()stringByAppendingString:@"/Documents/downloadFi le"];

    

    NSString * tempPath = [NSHomeDirectory()stringByAppendingString:@"/Documents/temploadFile"];

    

    _req= [ASIFormDataRequest requestWithURL:url];

    _req.downloadDestinationPath =[NSString stringWithFormat:@"%@/%@",downPath,name];

    

    _req.temporaryFileDownloadPath = [NSString stringWithFormat:@"%@/%@",tempPath,name];

    

    _req.allowResumeForFileDownloads = YES;

    

    // 发送网络请求

    [_req startAsynchronous];


    

    [_req setCompletionBlock:^{

        

        //注册一个通知,当下载完毕了通知按钮改变状态

        NSLog(@"下载完毕");

        

        [[NSNotificationCenter defaultCenter]postNotificationName:@"finish" object:self];

        

    }];

}

7.aaa

//创建二级目录

-(void)createPath

{

    

    NSString * downPath = [NSHomeDirectory()stringByAppendingString:@"/Documents/downloadFi le"];

    

     NSString * tempPath = [NSHomeDirectory()stringByAppendingString:@"/Documents/temploadFile"];


    

   //如果存在就返回,不存在再创建----临时的目录

    if ([[NSFileManager defaultManager]fileExistsAtPath:tempPath]) {

        

        return;

    }else{

      

        [[NSFileManager defaultManager] createDirectoryAtPath:tempPath withIntermediateDirectories:YES attributes:nil error:nil];

        

    }

    

   //如果存在就返回,不存在再创建----最终的目录

    if ([[NSFileManager defaultManager]fileExistsAtPath:downPath]) {

        return;

    }else{

        [[NSFileManager defaultManager] createDirectoryAtPath:downPath withIntermediateDirectories:YES attributes:nil error:nil];

    }

    

}

6.2222此时的6

-(void)btnClick:(Btn *)btn

{

    

    FileModel * model = _arr[btn.tag];

    

    switch (btn.currentBtn) {

        case ButtonStateNormal:

        {

            

        //点击后,开始下载

            

            [_engine downloadWithUrl:model.url Name:model.name];//2.

            

            btn.currentBtn = ButtonStateDowning;

            

         }

            break;

        case ButtonStateDowning:

        {  //点击后,暂停

            

            [_engine stopDownLoad];//2.

            btn.currentBtn = ButtonStatePause;

        }

            break;

        case ButtonStatePause:

        {   //点击后,继续下载

            

            [_engine downloadWithUrl:model.url Name:model.name];//2.

            btn.currentBtn = ButtonStateDowning;

        }

            break;

        case ButtonStateComplete:

        {   //点击后查看,跳转页面

            

            DetailFileVC * vc = [[DetailFileVC alloc]init];

            

            [self presentViewController:vc animated:YES completion:nil];

        }

            

#warning mark-- 1.  赋值完毕重写 set 方法,因为描述了,(set get 方法)(取值是get方法)

            

            break;

    

        default:

            break;

    }

    

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值