文档章节

加载 info.plist文件

Align
 Align
发布于 2016/03/07 14:12
字数 689
阅读 1569
收藏 3
点赞 3
评论 2
#import "ViewController.h"

@interface ViewController ()
/** 存放所有商品的整体 */
@property (weak, nonatomic) IBOutlet UIView *shopsView;

/** HUD */
@property (weak, nonatomic) IBOutlet UILabel *hud;

// 文档注释
/** 添加按钮 */
@property (weak, nonatomic) UIButton *addBtn;
/** 删除按钮 */
@property (weak, nonatomic) UIButton *removeBtn;

/** 全部商品数据 */
@property (strong, nonatomic) NSArray *shops;
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // 添加“添加按钮”
    self.addBtn = [self addButtonWithImage:@"add" highImage:@"add_highlighted" disableImage:@"add_disabled" frame:CGRectMake(30, 30, 50, 50) action:@selector(add)];
    
    // 添加“删除按钮”
    self.removeBtn = [self addButtonWithImage:@"remove" highImage:@"remove_highlighted" disableImage:@"remove_disabled" frame:CGRectMake(270, 30, 50, 50) action:@selector(remove)];
    self.removeBtn.enabled = NO;
    
    // 加载plist数据
    
    // 一个NSBundle对象对应一个资源包(图片、音频、视频、plis等文件)
    // NSBundle的作用:用来访问与之对应的资源包内部的文件,可以用来获得文件的全路径
    // 项目中添加的资源都会被添加到主资源包中
    // [NSBundle mainBundle]关联的就是项目的主资源包
    NSBundle *bundle = [NSBundle mainBundle];
    
    // 利用mainBundle获得plist文件在主资源包中的全路径
    NSString *file = [bundle pathForResource:@"shops" ofType:@"plist"];
//    NSString *file = [bundle pathForResource:@"shops.plist" ofType:nil];
    
    // 凡是参数名为File,传递的都是文件的全路径
    self.shops = [NSArray arrayWithContentsOfFile:file];
}

#pragma mark 添加按钮
- (UIButton *)addButtonWithImage:(NSString *)image highImage:(NSString *)highImage disableImage:(NSString *)disableImage frame:(CGRect)frame action:(SEL)action
{
    // 创建按钮
    UIButton *btn = [[UIButton alloc] init];
    // 设置背景图片
    [btn setBackgroundImage:[UIImage imageNamed:image] forState:UIControlStateNormal];
    [btn setBackgroundImage:[UIImage imageNamed:highImage] forState:UIControlStateHighlighted];
    [btn setBackgroundImage:[UIImage imageNamed:disableImage] forState:UIControlStateDisabled];
    // 设置位置和尺寸
    btn.frame = frame;
    // 监听按钮点击
    [btn addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
    // 添加按钮
    [self.view addSubview:btn];
    return btn;
}

#pragma mark 添加
- (void)add
{
//    self.shopsView.clipsToBounds = YES;
    
    // 每一个商品的尺寸
    CGFloat shopW = 80;
    CGFloat shopH = 90;
    
    // 一行的列数
    int cols = 3;
    
    // 每一列之间的间距
    CGFloat colMargin = (self.shopsView.frame.size.width - cols * shopW) / (cols - 1);
    // 每一行之间的间距
    CGFloat rowMargin = 10;
    
    // 创建一个父控件(整体:存放图片和文字)
    UIView *shopView = [[UIView alloc] init];
    shopView.backgroundColor = [UIColor redColor];
    
    // 商品的索引
    NSUInteger index = self.shopsView.subviews.count;
    
    // 商品的x值
    NSUInteger col = index % cols;
    CGFloat shopX = col * (shopW + colMargin);
    
    // 商品的y值
    NSUInteger row = index / cols;
    CGFloat shopY = row * (shopH + rowMargin);
    
    shopView.frame = CGRectMake(shopX, shopY, shopW, shopH);
    [self.shopsView addSubview:shopView];
    
    // 获得index位置对应的商品数据
    NSDictionary *shop = self.shops[index];
    
    // 添加图片
    UIImageView *iconView = [[UIImageView alloc] init];
    iconView.image = [UIImage imageNamed:shop[@"icon"]];
    iconView.frame = CGRectMake(0, 0, shopW, shopW);
    iconView.backgroundColor = [UIColor blueColor];
    [shopView addSubview:iconView];
    
    // 添加文字
    UILabel *label = [[UILabel alloc] init];
    label.text = shop[@"name"];
    label.frame = CGRectMake(0, shopW, shopW, shopH - shopW);
    label.font = [UIFont systemFontOfSize:11];
    label.textAlignment = NSTextAlignmentCenter;
    [shopView addSubview:label];
    
    // 控制按钮的可用性
    [self checkState];
}

#pragma mark 删除
- (void)remove
{
    [[self.shopsView.subviews lastObject] removeFromSuperview];
    
    // 控制按钮的可用性
    [self checkState];
}

#pragma mark 检查状态:按钮状态
- (void)checkState
{
    // 删除按钮什么时候可以点击:商品个数 > 0
    self.removeBtn.enabled = (self.shopsView.subviews.count > 0);
    // 添加按钮什么时候可以点击:商品个数 < 总数
    self.addBtn.enabled = (self.shopsView.subviews.count < self.shops.count);
    
    // 显示HUD
    NSString *text = nil;
    if (self.removeBtn.enabled == NO) { // 删光了
        text = @"已经全部删除";
    } else if (self.addBtn.enabled == NO) { // 加满了
        text = @"已经添加满了";
    }
    if (text == nil) return;
    
    self.hud.text = text;
    self.hud.alpha = 1.0;
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        self.hud.alpha = 0.0;
    });
}

@end

© 著作权归作者所有

共有 人打赏支持
Align
粉丝 11
博文 63
码字总数 71695
作品 0
昌平
高级程序员
加载中

评论(2)

450426721
450426721
给大家分享一个不错的存储框架:https://github.com/huangzhibiao/BGFMDB
我是活雷锋
完美支持:
int,long,signed,float,double,NSInteger,CGFloat,BOOL,NSString,NSMutableString,NSNumber,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary,NSMapTable,NSHashTable,NSData,NSMutableData,UIImage,NSDate,NSURL,NSRange,CGRect,CGSize,CGPoint,自定义对象 等的存储.

框架同时带有"字典转模型"的功能模块,在只需要将服务器传过来的字典转成模型的情况下,可以不必要再引入MJExtension那么多文件,造成代码冗余,缩减安装包.
勺子速度
android 安卓 IOS ramp APP播放器源码出售。延迟2-3S,支持直播点播,同时承接直播搭建项目,有需要的客户欢迎咨询旺旺:dashoua2,或者QQ:517496165,胡先生
IOS之Info.plist文件简介

元信息简介 为了提供更好的用户体验,IOS 和 OS X的每个app或bundle都依赖于特殊的元信息(meta Information). 元信息有多种用途,包括 直接向用户展示信息 系统内部用来标识你的app或其支持的...

big军
2013/01/23
0
3
修改运行时 Info.plist--NZBundle

NZBundle 可以在运行时修改 Info.plist 项目的信息,可以在 Info.plist 文件加载到内存的时候自定义里面的数据。

叶秀兰
2013/12/28
396
0
IOS9 微信支付报 prepayid 获取失败 ErrorDomainSSL, -9802

微信支付或访问一些网站时报错: SDKSample[669:19724] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) 原因是 : IOS9 中将 http 请求改成了 HTTPS(加密......

Jack088
2015/10/09
3.5K
0
Swift4.0开发笔记

目录 1、ATS配置 2、状态栏全局变亮白 3、懒加载 4、内存泄漏 5、常用的第三方库 6、反射机制 7、运行时 8、MD5加密 9、聊天界面 10、多线程GCD 11、 启动图尺寸大小 1、ATS配置 App 网络htt...

星星编程
2017/11/03
0
0
让不懂编程的人爱上iPhone开发(2017秋iOS11+Swift4+Xcode9版)-第12篇

欢迎继续我们的iPhone开发学习,接下来的内容应该是产品和设计人员的最爱-美化界面。 为了让玩家得到更好的沉浸体验,我们必须让产品的外在和内在一样美,甚至更美。 在这部分的内容中,我们...

王寒
2017/10/31
0
0
解决:SDWebImage异步请求图片失败,图片没有加载出来

抛出的异常: 异常表示,访问的连接是不安全的,所以资源的访问被阻止。 我们可以通道配置info.plist文件强制访问被阻止的资源,方法如下: 复制如下xml片段: <key>NSAppTransportSecurity<...

issac宝华
2016/05/24
187
0
iOS开发--一些UINavigationBar属性的设置

1.iOS7之后 要想改变navigationbar的颜色 可以这样子改 self.navigationController.navigationBar.barTintColor = [UIColor colorWithHexString:@"#3A3A3A" alpha:1.0f]; 默认带有一定透明效......

北方人在上海
2016/01/19
50
0
关于iOS App Programming

一、App Design Basics 二、Core App Objects 1)UIApplication对象:管理应用事件loop和协调行为。你在appDelegate中可以用到它,或者通过[UIApplication sharedAppliation]得到。 2)App De...

木木情深
2015/01/07
0
0
【iOS扩展开发攻略】Action Extension

上一篇《iOS扩展开发攻略:Share Extension》介绍了分享扩展的开发与使用,本篇主要还是讲述在系统分享菜单中最底下一栏的功能扩展:Action Extension,该扩展跟Share Extension实现比较类似...

杰嗒嗒的阿杰
2017/06/27
0
0
LBYPageDetection-通过截屏分析颜色占比来检测页面加载情况

在诸多的性能指标里,「页面加载完成耗时」是非常重要的一项,尤其是重点页面,如详情页,1 秒内打开和 3 秒内打开差别是很大的,直接影响 GMV。 再来说一下「页面加载完成」的定义,不是页面...

Billlin
03/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

32.filter表案例 nat表应用 (iptables)

10.15 iptables filter表案例 10.16/10.17/10.18 iptables nat表应用 10.15 iptables filter表案例: ~1. 写一个具体的iptables小案例,需求是把80端口、22端口、21 端口放行。但是,22端口我...

王鑫linux
今天
0
0
shell中的函数&shell中的数组&告警系统需求分析

20.16/20.17 shell中的函数 20.18 shell中的数组 20.19 告警系统需求分析

影夜Linux
今天
0
0
Linux网络基础、Linux防火墙

Linux网络基础 ip addr 命令 :查看网口信息 ifconfig命令:查看网口信息,要比ip addr更明了一些 centos 7默认没安装ifconfig命令,可以使用yum install -y net-tools命令来安装。 ifconfig...

李超小牛子
今天
1
0
[机器学习]回归--Decision Tree Regression

CART决策树又称分类回归树,当数据集的因变量为连续性数值时,该树算法就是一个回归树,可以用叶节点观察的均值作为预测值;当数据集的因变量为离散型数值时,该树算法就是一个分类树,可以很...

wangxuwei
昨天
1
0
Redis做分布式无锁CAS的问题

因为Redis本身是单线程的,具备原子性,所以可以用来做分布式无锁的操作,但会有一点小问题。 public interface OrderService { public String getOrderNo();} public class OrderRe...

算法之名
昨天
9
0
143. Reorder List - LeetCode

Question 143. Reorder List Solution 题目大意:给一个链表,将这个列表分成前后两部分,后半部分反转,再将这两分链表的节点交替连接成一个新的链表 思路 :先将链表分成前后两部分,将后部...

yysue
昨天
1
0
数据结构与算法1

第一个代码,描述一个被称为BankAccount的类,该类模拟了银行中的账户操作。程序建立了一个开户金额,显示金额,存款,取款并显示余额。 主要的知识点联系为类的含义,构造函数,公有和私有。...

沉迷于编程的小菜菜
昨天
1
0
从为什么别的队伍总比你的快说起

在机场候检排队的时候,大多数情况下,别的队伍都要比自己所在的队伍快,并常常懊悔当初怎么没去那个队。 其实,最快的队伍只能有一个,而排队之前并不知道那个队快。所以,如果有六个队伍你...

我是菜鸟我骄傲
昨天
1
0
分布式事务常见的解决方案

随着互联网的发展,越来越多的多服务相互之间的调用,这时候就产生了一个问题,在单项目情况下很容易实现的事务控制(通过数据库的acid控制),变得不那么容易。 这时候就产生了多种方案: ...

小海bug
昨天
3
0
python从零学——scrapy初体验

python从零学——scrapy初体验 近日因为一些事情,需要从网上爬取一些东西,故而想通过使用爬虫来顺便学习下强大的python。现将一些学习中遇到的问题记录下来,以便日后查询 1. 开发环境的准...

咾咔叽
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部