• 简介
  • 效果展示
  • 思路分析
  • 代码实现
  • Git地址

一、简介

某些公司有较多的产品时,通常会在一个产品中推广另外的一些产品,我简单的封装了一个UIControllerView,由于不同公司,要求不同。所以大家可以根据自己不同的需求来改里面的内容,希望对大家有用。

我这里解压网易的资源文件,获取到的数据。(如有任何问题,联系本人372623326@qq.com)


二、效果展示

因为我的截图都是使用的模拟器,所以后面都显示的下载图标。如果用真机会根据用户是否下载了对应的应用来判断显示什么样的图片,以及用户之后点击究竟跳转到App Store还是打开应用。(大家可自己测试,后面会放代码)


三、思路分析

网易的资源是json本地文件,里面有所以的资源,已经打开对应的应用的URL和下载应用的URL。我们在显示的时候,只需要根据模型数据,来决定显示就好了


四、代码实现

1⃣️第一个页面的代码实现((.m文件)主要是改变导航条的一些代码,真正用到的时候,只需要告诉第二个页面,json文件的名称就可以了)

#import "MainViewController.h"
#import "ProjectModel.h"
#import "ViewController.h" #define iOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) @interface MainViewController ()
{
NSArray *_projectData;
}
@end @implementation MainViewController + (void)initialize
{
// 1.取出设置主题的对象
UINavigationBar *navBar = [UINavigationBar appearance];
UIBarButtonItem *barItem = [UIBarButtonItem appearance]; // 2.设置导航栏的背景图片
NSString *navBarBg = nil;
if (iOS7) { // iOS7
navBarBg = @"NavBar64"; // 设置导航栏的渐变色为白色(iOS7中返回箭头的颜色变为这个颜色:白色)
navBar.tintColor = [UIColor whiteColor];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
} else { // 非iOS7
navBarBg = @"NavBar";
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackOpaque; // 设置导航栏按钮的背景图片
[barItem setBackgroundImage:[UIImage imageNamed:@"NavButton"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[barItem setBackgroundImage:[UIImage imageNamed:@"NavButtonPressed"] forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault]; // 设置导航栏返回按钮的背景图片
[barItem setBackButtonBackgroundImage:[UIImage imageNamed:@"NavBackButton"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[barItem setBackButtonBackgroundImage:[UIImage imageNamed:@"NavBackButtonPressed"] forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
} [navBar setBackgroundImage:[UIImage imageNamed:navBarBg] forBarMetrics:UIBarMetricsDefault]; // 3.设置导航栏标题颜色为白色
[navBar setTitleTextAttributes:@{
UITextAttributeTextColor : [UIColor whiteColor]
}]; // 4.设置导航栏按钮文字颜色为白色
[barItem setTitleTextAttributes:@{
UITextAttributeTextColor : [UIColor whiteColor],
UITextAttributeFont : [UIFont systemFontOfSize:]
} forState:UIControlStateNormal]; } - (void)viewDidLoad {
[super viewDidLoad]; self.title = @"主页";
[self addRecommendBtn];
} - (void)addRecommendBtn
{
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(, , , );
[btn setTitle:@"网易推荐应用" forState:UIControlStateNormal];
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
btn.titleLabel.font = [UIFont systemFontOfSize:14.0];
[btn addTarget:self action:@selector(recommendClick) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn];
} - (void)recommendClick
{
ViewController *viewController = [[ViewController alloc] init];
viewController.jsonString = @"more_project.json"; [self.navigationController pushViewController:viewController animated:YES];
}

2⃣️推荐页面的实现(.m文件)

#import "ViewController.h"
#import "ProjectCell.h"
#import "ProjectModel.h" @interface ViewController ()
{
NSArray *_projectData;
}
@end @implementation ViewController - (void)setJsonString:(NSString *)jsonString
{
NSString *path = [[NSBundle mainBundle] pathForResource:jsonString ofType:nil];
NSData *data = [NSData dataWithContentsOfFile:path];
NSError *error;
NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error]; NSMutableArray *tempArray = [NSMutableArray array];
for (NSDictionary *dict in array) {
ProjectModel *p = [ProjectModel ProjectWithDict:dict];
p.everDownload = [[UIApplication sharedApplication] canOpenURL:[self getUrl:p.customUrl]];
[tempArray addObject:p];
}
_projectData = tempArray;
} - (NSURL *)getUrl:(NSString *)url
{
NSString *urlStr = [NSString stringWithFormat:@"%@://", url];
return [NSURL URLWithString:urlStr];
} - (void)viewDidLoad {
[super viewDidLoad]; self.navigationController.navigationBar.translucent = NO; self.title = @"推荐应用";
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.showsVerticalScrollIndicator = NO;
self.tableView.allowsSelection = NO;
} - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _projectData.count;
} - (ProjectCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"cell";
ProjectCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil) {
cell = [[ProjectCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
} cell.project = _projectData[indexPath.row];
return cell;
} - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return ;
} @end

3⃣️ cell的实现文件(.m文件)

#import "ProjectCell.h"

#define kIconW 54
#define kIconH 54 #define kPadding 10 #define kBtnW 40
#define kBtnH 40 @interface ProjectCell()
{
UIButton *_controlBtn; BOOL _canOpen;
}
@end @implementation ProjectCell - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.center = CGPointMake(self.frame.size.width - kBtnW * 0.5 - kPadding, self.frame.size.height * 0.5 + kPadding);
btn.bounds = CGRectMake(, , kBtnW, kBtnH);
[btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
_controlBtn = btn;
[self.contentView addSubview:btn];
} return self;
} - (void)btnClick
{
if (_canOpen) {
[[UIApplication sharedApplication] openURL:[self getUrl:_project.customUrl]];
} else {
[[UIApplication sharedApplication] openURL:[self getUrl:_project.url]];
}
} - (void)setProject:(ProjectModel *)project
{
_project = project;
_canOpen = project.isEverDownload; self.imageView.image = [UIImage imageNamed:project.icon];
self.textLabel.text = project.title;
self.detailTextLabel.text = project.stitle; if (project.isEverDownload) {
[_controlBtn setImage:[UIImage imageNamed:@"appadcell_openbutton"] forState:UIControlStateNormal];
} else {
[_controlBtn setImage:[UIImage imageNamed:@"appadcell_downloadbutton"] forState:UIControlStateNormal];
}
} - (NSURL *)getUrl:(NSString *)url
{
NSString *urlStr = [NSString stringWithFormat:@"%@://", url];
return [NSURL URLWithString:urlStr];
} - (void)layoutSubviews
{
[super layoutSubviews]; CGFloat cellH = self.frame.size.height;
self.imageView.frame = CGRectMake(cellH - kIconW, (cellH - kIconH) * 0.5, kIconW, kIconH);
self.imageView.contentMode = UIViewContentModeScaleAspectFit; CGRect oldLabelFrame = self.textLabel.frame;
oldLabelFrame.origin.x = CGRectGetMaxX(self.imageView.frame) + kPadding;
self.textLabel.frame = oldLabelFrame; CGRect oldDetailLabelFrame = self.detailTextLabel.frame;
oldDetailLabelFrame.origin.x = oldLabelFrame.origin.x;
self.detailTextLabel.frame = oldDetailLabelFrame;
} @end

五、Git下载地址

(后续更新上去https://github.com/wangzi9521

iOS项目开发之仿网易彩票推荐应用的更多相关文章

  1. iOS项目开发常用功能静态库

    YHDeveloperTools iOS项目开发常用功能静态库 查看源码 功能方法: 1.字符检查 [NSString checkStringWithType:Email andTargetStrin ...

  2. iOS项目开发实战——学会使用TableView列表控件(四)plist读取与Section显示

    文本将会实现把数据存储到plist文件里.然后在程序中进行读取.在TableView控件中依据不同的类别显示Section. 有关TableView 的其它实现,请參考<iOS项目开发实战--学 ...

  3. 聚合数据 iOS 项目开发实战:条码查询器

    记录下,聚合数据 iOS 项目开发实战:条码查询器:视频地址:http://www.jikexueyuan.com/course/324.html 条码查询API:https://www.juhe.c ...

  4. ios项目开发汇总

    UI界面 iOS和Android 界面设计尺寸规范  http://www.alibuybuy.com/posts/85486.html iPhone app界面设计尺寸规范  http://www. ...

  5. iOS项目开发优秀文章汇总

    UI界面 iOS和Android 界面设计尺寸规范  http://www.alibuybuy.com/posts/85486.html iPhone app界面设计尺寸规范  http://www. ...

  6. iOS项目开发实战——使用CoreLocation获取当前位置信息

    随着基于位置服务LBS和移动互联网的兴起,你的位置是越来越重要的一个信息.位置服务已经是当前的热门应用如微信.陌陌等社交应用的杀手锏.而在iOS开发中,苹果已经给我们提供了一个位置接口.CoreLoc ...

  7. iOS项目开发实战——通过Http Get方式与server通信

    移动client往往须要同后台server进行通信,上传或者下载数据,最经常使用到的方式就是Http Get,如今我们来学习在iOS项目中使用Get方式同server进行通信. [一]server端实 ...

  8. iOS项目开发实战——iOS网络编程获取网页Html源码

    现在我们身处互联网的时代.不论什么一个软件或是App,都会或多或少与网络打交道,并不断发生数据交互.一个没有涉及网络编程的应用会显得比較low,这里我们将会開始使用Swift开发iOS应用,而且主要来 ...

  9. iOS项目开发实战——plist数组解析

    plist数据是苹果公司创造的数据格式,基于XML,因为在iOS,Mac系统中操作plist很方便,所以我们经常会用到.在iOS项目中.系统会自己主动生成一个Info.plist文件,里面存放了iOS ...

随机推荐

  1. UVA 11045 My T-shirt suits me

    一开始就想到网络流..后来一想暴力能不能过.自己写的T了.看了别人有暴力过的. 暴力的思路就是6进制数字表示给予的衣服的数量.然后每个人的需求表示成01 的6位串然后爆搜. 网络流就建一个源一个汇 然 ...

  2. Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.Exec

    Error:Execution failed for task ':app:transformClassesWithDexForDebug'.> com.android.build.api.tr ...

  3. 获取URL中的文件的扩展名

    问题: 尽可能多地写出获取文件扩展名的方法: //方法一(分割数组) function getExt($url){ $arr = explode('.',$url); $len = count($ar ...

  4. dict和set背后的实现原理

    # 先说结论 ''' dict的性能远大于list 在list中,随着数据的增大,时间也会增大 在dict中,随着数据的增大,时间没有变化 ''' # 目的:我们研究为什么dict的性能远大于list ...

  5. centos6.5 安装mysql

    在centos6.5上通过yum安装mysql: 1. yum list |grep mysql   (查看版本) 2.安装mysql yum install -y mysql-server mysq ...

  6. 在C#中调用格式工厂进行任意视频格式到FLV的转换

    1.下载安装格式工厂和完美解码器 2.运行格式工厂,转换一个RMVB到FLV,注意找个大点的,使时间长一些.防止在未执行步骤3时就结束了 3.在进程中查看某个进程的命令行参数是什么? wmic pro ...

  7. SqlServer 2014安装指引

    具体步骤看整理的Word文档 链接:https://pan.baidu.com/s/1zOhaFVpro2DNnJlJ6dbSEg 密码:lj4m 具体步这里不介绍了,这里记录下报错信息 这个是说系统 ...

  8. StringBuffer 清空

    几种方法: 方法1: 1 2 3 4 StringBuffer my_StringBuffer = new StringBuffer(); my_StringBuffer.append('hellow ...

  9. Codeforces Round #325 (Div. 2) Laurenty and Shop 模拟

    原题链接:http://codeforces.com/contest/586/problem/B 题意: 大概就是给你一个两行的路,让你寻找一个来回的最短路,并且不能走重复的路. 题解: 就枚举上下选 ...

  10. Static和Final修饰类属性变量及初始化

    1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那 ...