IOS 应用程序管理的实现
程序员文章站
2023-12-20 16:07:52
ios 应用程序管理的实现
1. 项目名称:应用管理
2. 项目截图展示
3. 项目功能
展示应用图标,名称和下载按钮
点击下载按钮,出现“正在下载”图标...
ios 应用程序管理的实现
1. 项目名称:应用管理
2. 项目截图展示
3. 项目功能
展示应用图标,名称和下载按钮
点击下载按钮,出现“正在下载”图标
4. 项目代码
模型代码:appinfo.h
#import <foundation/foundation.h> #import <uikit/uikit.h> @interface appinfo : nsobject @property (nonatomic, copy) nsstring *name; @property (nonatomic, copy) nsstring *icon; @property (nonatomic, strong, readonly) uiimage *image; /** 使用字典实例化模型 */ - (instancetype)initwithdict:(nsdictionary *)dict; /** 快速实例化一个对象 */ + (instancetype)appinfowithdict:(nsdictionary *)dict; /** 返回所有plist中的数据模型数组 */ + (nsarray *)applist; @end
模型代码:appinfo.m
#import "appinfo.h" @implementation appinfo // 合成指令,主动指定属性使用的成员变量名称 @synthesize image = _image; //图片模型 - (uiimage *)image { if (_image == nil) { _image = [uiimage imagenamed:self.icon]; } return _image; } - (instancetype)initwithdict:(nsdictionary *)dict { self = [super init]; if (self) { // 用字典给属性赋值 // self.name = dict[@"name"]; //将字典的内容赋值给属性 // self.icon = dict[@"icon"]; [self setvaluesforkeyswithdictionary:dict]; } return self; } + (instancetype)appinfowithdict:(nsdictionary *)dict { return [[self alloc] initwithdict:dict]; } + (nsarray *)applist { nsarray *array = [nsarray arraywithcontentsoffile:[[nsbundle mainbundle] pathforresource:@"app.plist" oftype:nil]]; // 创建一个临时可变数组 nsmutablearray *arraym = [nsmutablearray array]; // 遍历数组,依次转换模型 for (nsdictionary *dict in array) { [arraym addobject:[appinfo appinfowithdict:dict]]; } return arraym; } @end
模型view:appview.h
#import <uikit/uikit.h> @class appinfo; @interface appview : uiview /** 类方法,方便调用视图 */ + (instancetype)appview; /** 实例化视图,并使用appinfo设置视图的显示 */ + (instancetype)appviewwithappinfo:(appinfo *)appinfo; // 自定义视图中显示的数据来源是数据模型 // 使用模型设置自定义视图的显示 @property (nonatomic, strong) appinfo *appinfo; @end
模型view:appview.m
#import "appview.h" #import "appinfo.h" @interface appview() @property (weak, nonatomic) iboutlet uiimageview *iconview; @property (weak, nonatomic) iboutlet uilabel *label; @end @implementation appview //实例化xib + (instancetype)appview { return [[[nsbundle mainbundle] loadnibnamed:@"appview" owner:nil options:nil] lastobject]; } //根据模型实例化xib + (instancetype)appviewwithappinfo:(appinfo *)appinfo { // 1. 实例化一个视图 appview *view = [self appview]; // 2. 设置视图的显示 view.appinfo = appinfo;//包含,appview有appinfo的属性 // 3. 返回视图 return view; } /** 利用setter方法设置视图的界面显示 */ - (void)setappinfo:(appinfo *)appinfo { _appinfo = appinfo; self.label.text = appinfo.name; self.iconview.image = appinfo.image; } /** 按钮监听方法 */ - (ibaction)click:(uibutton *)button { // 添加一个uilabel到界面上 uilabel *label = [[uilabel alloc] initwithframe:cgrectmake(80, 400, 160, 40)]; // 数值是0表示黑色,1表示纯白;alpha表示透明度 label.backgroundcolor = [uicolor colorwithwhite:0.0 alpha:0.2]; label.text = self.appinfo.name; label.textalignment = nstextalignmentcenter; // self.superview就是视图控制器中的self.view [self.superview addsubview:label]; // 动画效果 label.alpha = 0.0; // 禁用按钮,如果点击了按钮以后就禁用按钮 button.enabled = no; // 动画结束之后删除 [uiview animatewithduration:1.0f animations:^{ // 要修改的动画属性 label.alpha = 1.0; } completion:^(bool finished) { [uiview animatewithduration:1.0 animations:^{ label.alpha = 0.0; } completion:^(bool finished) [label removefromsuperview]; }]; }]; } @end
viewcontroller.m
#import "viewcontroller.h" #import "appinfo.h" #import "appview.h" #define kappvieww 80 #define kappviewh 90 #define kcolcount 3 #define kstarty 20 @interface viewcontroller () /** 应用程序列表 */ @property (nonatomic, strong) nsarray *applist; @end @implementation viewcontroller - (nsarray *)applist { if (_applist == nil) { _applist = [appinfo applist]; } return _applist; } - (void)viewdidload { [super viewdidload]; // 搭建九宫格 // 320 - 3 * 80 = 80 / 4 = 20 cgfloat marginx = (self.view.bounds.size.width - kcolcount * kappvieww) / (kcolcount + 1); cgfloat marginy = 10; for (int i = 0; i < self.applist.count; i++) { // 行 int row = i / kcolcount; // 列 int col = i % kcolcount; cgfloat x = marginx + col * (marginx + kappvieww); cgfloat y = kstarty + marginy + row * (marginy + kappviewh); //加载第i个xib视图 appview *appview = [appview appviewwithappinfo:self.applist[i]]; // 设置视图位置 appview.frame = cgrectmake(x, y, kappvieww, kappviewh); [self.view addsubview:appview]; } }
5. 本项目必须掌握的代码段
字典转模型
- (instancetype)initwithdict:(nsdictionary *)dict { self = [super init]; if (self) { [self setvaluesforkeyswithdictionary:dict]; } return self; } + (instancetype)appinfowithdict:(nsdictionary *)dict { return [[self alloc] initwithdict:dict]; } + (nsarray *)applist { nsarray *array = [nsarray arraywithcontentsoffile:[[nsbundle mainbundle] pathforresource:@"app.plist" oftype:nil]]; // 创建一个临时可变数组 nsmutablearray *arraym = [nsmutablearray array]; // 遍历数组,依次转换模型 for (nsdictionary *dict in array) { [arraym addobject:[appinfo appinfowithdict:dict]]; } return arraym; }
kvc
[self setvaluesforkeyswithdictionary:dict];
6. 笔记
字典转模型:
plist文件有多个字典,把字典的元素转换成模型类对象的成员变量,将模型类对象放入数组中 模型的属性名称和plist文件中的key名称必须一致
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!