亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

IOS 應用程序管理的實現

2020-07-26 02:40:10
字體:
來源:轉載
供稿:網友

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名稱必須一致

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美电影《睫毛膏》| 欧美激情精品久久久| 欧美影院久久久| 亚洲第一天堂无码专区| 亚洲一级黄色av| 日韩av在线高清| 国产欧美日韩精品在线观看| 青青a在线精品免费观看| 亚洲一区二区久久久久久| 久久精品久久久久电影| 国产一区玩具在线观看| 亚洲成人精品av| 亚洲第一福利在线观看| 国语自产精品视频在线看一大j8| 裸体女人亚洲精品一区| 国产又爽又黄的激情精品视频| 欧美亚洲视频在线观看| 国产成人鲁鲁免费视频a| 国产精品成人一区| 91精品久久久久久久久久| 亚洲国产成人精品久久| 久久久久久久一区二区| 亚洲天堂第一页| 久久亚洲综合国产精品99麻豆精品福利| www.欧美精品| 亚洲精品一区在线观看香蕉| 欧美精品国产精品日韩精品| 成人精品在线视频| 亚洲一区二区三区xxx视频| 91久久精品一区| 97精品一区二区三区| 91免费的视频在线播放| 久久久久成人精品| 亚洲成人黄色网址| 国产精品99久久99久久久二8| 欧美一级大片在线免费观看| 日韩视频永久免费观看| 91亚洲午夜在线| 欧美性猛交xxxxx免费看| 国产一区二区三区中文| 久久久久久久网站| 美日韩精品视频免费看| 国内自拍欧美激情| 久久久极品av| 欧美日韩在线观看视频| 亚洲欧美中文字幕| 亚洲人成电影网站色…| 国产精品久久久久久中文字| 黑丝美女久久久| 美女撒尿一区二区三区| 日韩精品视频在线观看网址| 欧洲成人免费aa| 国产精品一区电影| 亚洲一区二区三区久久| 91精品国产电影| 国产精品99久久99久久久二8| 亚洲美女在线视频| 久热爱精品视频线路一| 亚洲国产古装精品网站| 亚洲欧美激情四射在线日| 欧美色视频日本高清在线观看| 久久香蕉精品香蕉| 亚洲精品aⅴ中文字幕乱码| 日韩免费中文字幕| 久久九九国产精品怡红院| 国产不卡一区二区在线播放| 91久久久久久久久久| 欧美成人性色生活仑片| 91精品久久久久久久久| 欧美一级淫片videoshd| 久久久久久久久久婷婷| 国内免费精品永久在线视频| 日韩性xxxx爱| 色诱女教师一区二区三区| 日本19禁啪啪免费观看www| 精品在线小视频| 国产精品麻豆va在线播放| 5278欧美一区二区三区| 国产精品久久久久久亚洲调教| 俺去了亚洲欧美日韩| 亚洲毛茸茸少妇高潮呻吟| 亚洲欧美另类中文字幕| 亚洲激情 国产| 欧美寡妇偷汉性猛交| 岛国精品视频在线播放| 97激碰免费视频| 欧美伊久线香蕉线新在线| 日韩美女视频中文字幕| 亚洲精品美女网站| 国产精品午夜视频| 国产一区二区久久精品| 欧美最顶级丰满的aⅴ艳星| 日韩经典中文字幕| 亚洲精品色婷婷福利天堂| 欧美大片在线看免费观看| 欧美丝袜美女中出在线| 国产精品国产自产拍高清av水多| 国产人妖伪娘一区91| 中文字幕在线国产精品| 18久久久久久| 久久在线免费视频| 国产亚洲a∨片在线观看| 欧美猛少妇色xxxxx| 国产精品色婷婷视频| 懂色av影视一区二区三区| 日韩国产在线看| 国产精品久久久久久久7电影| 国产亚洲欧洲高清| 欧美日韩中文字幕在线| 成人精品久久久| 成人在线免费观看视视频| 亚洲精品久久久久国产| 亚洲精品白浆高清久久久久久| 亚洲成人免费网站| 国产成人亚洲精品| 亚洲在线观看视频网站| 亚洲人成网7777777国产| 亚洲影院色无极综合| 欧美第一淫aaasss性| 欧美日韩国产91| xxxxxxxxx欧美| 在线视频日本亚洲性| 亚洲一区二区三区四区视频| 亚洲天堂av综合网| 在线a欧美视频| 日韩精品一区二区三区第95| 国产一区二区三区毛片| 欧美在线一区二区视频| 精品亚洲一区二区三区在线观看| 26uuu久久噜噜噜噜| 亚洲成人精品视频在线观看| 欧美大尺度电影在线观看| 97国产精品免费视频| 亚洲精品日产aⅴ| 日韩av网站大全| 91国产美女在线观看| 国产99在线|中文| 中文字幕av日韩| 在线观看不卡av| 亚洲国产成人91精品| 91精品国产成人| 91精品国产高清久久久久久91| 美乳少妇欧美精品| 久久免费视频网| 久久久在线观看| 91理论片午午论夜理片久久| 欧美亚洲另类激情另类| 精品一区二区三区四区在线| 欧美日韩色婷婷| 亚洲天堂网在线观看| 国产97人人超碰caoprom| 国产有码在线一区二区视频| 亚洲自拍偷拍区| 色爱精品视频一区| 51色欧美片视频在线观看| 亚洲国产日韩欧美在线动漫| 日本成人免费在线| 久久中文字幕在线| 91中文精品字幕在线视频| 欧美日韩人人澡狠狠躁视频| 亚洲高清不卡av| 亚洲国产小视频| 欧美亚洲成人网| 欧美极品xxxx|