枚举 UIButton补充
一、URL
1.什么是URL?
URL是某个资源的唯一路径,通过这个路径就能访问对应的资源
2.URL的组成
协议头://全路径
* 协议头就代表资源的类型,比如http代表网络服务器资源,ftp代表ftp文件服务器资源,file代表本地资源
3.举例
http://www.baidu.com
http://www.sina.com/a.jpg
ftp://192.168.3.251/abc.mp4
file:///Users/apple/Desktop/abc.txt
4.获得项目中某个文件的资源路径(URL)
NSURL *url = [[NSBundle mainBundle] URLForResource:@"messages.plist" withExtension:nil];
5.将字符串路径转成URL
NSURL *url1 = [NSURL URLWithString:@"http://www.baidu.com"];
NSURL *url2 = [NSURL URLWithString:@"file:///Users/apple/Desktop/abc.txt"];
NSURL *url3 = [NSURL fileURLWithPath:@"/Users/apple/Desktop/abc.txt"];
6.转码
如果路径中包含了中文,需要进行UTF-8转码
// 1.文件URL路径字符串
NSString *path = @"file:///Users/apple/Desktop/哈哈.txt";
// 2.将中文进行转码(UTF-8),返回转码后的字符串
// 转码后path变成了:file:///Users/apple/Desktop/%E5%93%88%E5%93%88.txt
path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// 3.生成URL
NSURL *url = [NSURL URLWithString:path];
二、开发规范
1.枚举
1> 当某个属性的值只有固定的几个取值时,应该用枚举
2> 枚举常量名以 “枚举类型名” 开头或者以 ”k + 枚举类型名“ 开头
* 比如
typedefenum {
MessageTypeMe = 0, // 我发的
MessageTypeOther = 1 // 别人发的
} MessageType;
* 或者
typedefenum {
kMessageTypeMe = 0, // 我发的
kMessageTypeOther = 1 // 别人发的
} MessageType;
2.readonly
如果某个属性的值只在类的内部修改\赋值,外界不需要修改\赋值、也不允许修改\赋值,尽量加上readonly关键字
三、UIButton
1.内部结构
1> UIButton内部默认有个UIImageView、UILabel控件,可以分别用下面属性访问:
@property(nonatomic,readonly,retain) UIImageView *imageView;
@property(nonatomic,readonly,retain) UILabel *titleLabel;
2> UIButton之所以能显示文字,完全是因为它内部的titleLabel
也就是说,UIButton的setTitle:forState:方法设置的字符串就是显示到了titleLabel上
3> UIButton的setImage:forState:方法设置的图片显示到了内部的imageView上
4> 注意
* 设置按钮的文字或文字颜色,必须用下面的方法
- (void)setTitle:(NSString *)title forState:(UIControlState)state;
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state;
#warnning 不能直接拿到titleLabel设置文字和文字颜色,比如下面的做法是错误的:
button.titleLabel.text = @"12323";
button.titleLabel.textColor = [UIColor redColor];
* 设置按钮内部的小图片,必须用下面的方法
- (void)setImage:(UIImage *)image forState:(UIControlState)state;
#warnning 不能直接拿到imageView设置图片,比如下面的做法是错误的:
button.imageView.image = [UIImage imageNamed:@"abc.png"];
2.其他设置
1> 设置按钮的文字自动换行
button.titleLabel.numberOfLines = 0;
2> 设置按钮的文字字体
button.titleLabel.font = [UIFont systemFontOfSize:16];
3> 设置按钮周边有多少区域不显示内容(不显示里面的小图片和文字)
// 顶部 10,左边 20,底部 10,右边 20
button.contentEdgeInsets = UIEdgeInsetsMake(10, 20, 10, 20);
四、图片拉伸
1.iOS 5.0之前的做法
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;
2.iOS 5.0的做法
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets;
3.iOS 6.0的做法
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode;
五、封装思想
1.如果有一段代码具备以下属性,应该抽到一个单独的类或者分类中:
1> 功能性:用来实现某个独立的功能
2> 工具性:简单易用实用
3> 全局性:整个项目中到处都用到这个功能
2.究竟这段功能代码抽到哪一个类或者分类,就看这个功能主要用到哪个类的方法\API,哪个类最清楚这个功能怎么实现
* 比如返回拉伸好图片的功能应该放在UIImage的分类中
枚举 UIButton补充的更多相关文章
- C#图解教程 第十一章 枚举
枚举 枚举 设置底层类型和显式值隐式成员编号 位标志 Flags特性使用位标志的示例 关于枚举的补充 枚举 枚举 枚举是由程序员定义的类型与类或结构一样. 与结构一样,枚举是值类型,因此直接存储它们的 ...
- Java研究
Strap 箱线图 峰度 随机过程 马尔科夫 超几何分布 贝叶斯公式 随机变量 德摩根 功率谱 残差 吸收壁 平稳随机 chorst 深入JVM OSGI ...
- for循环枚举法,全排列+dfs,补充浮点数注意事项
其实这个题目我一直没想好应该叫什么,就是在做蓝桥杯的时候会遇到很多的题,给你一等式,abcdef...分别是1-9(||12||15)不重复问你有几种方案? 我之前一直都是用的for循环在做,听说这叫 ...
- NX二次开发-Block UI C++界面Enumeration(枚举)控件的获取(持续补充)
NX9+VS2012 public: void SetBlockUIShow(); void EnumInt::SetBlockUIShow() { //获取枚举控件 PropertyList* En ...
- IOS UIButton 自定义的补充学习
一直自定按钮 遇到两个做的不好的地方. 1 是按钮响应方法时候状态自定义不好看 按压感不明显 2 是button上的title 是我自己用label写上去的 而不是用button的属性 这两天终于运用 ...
- IOS UI-Button按钮
#import "ViewController.h" @interface ViewController () { UILabel *lable; BOOL moveFlag; N ...
- 编写高质量代码:改善Java程序的151个建议(第6章:枚举和注解___建议88~92)
建议88:用枚举实现工厂方法模式更简洁 工厂方法模式(Factory Method Pattern)是" 创建对象的接口,让子类决定实例化哪一个类,并使一个类的实例化延迟到其它子类" ...
- 4. UIButton的使用
1. UIButton的初认识 来自:http://www.cnblogs.com/mcj-coding/p/5103891.html QQ:853740091 1.1 UIButton 是iOS 开 ...
- Map以及Set的遍历(EntrySet方法,补充enumeration和Iterator的区别)
public void mearge(Map map) { Map returnMap = new HashMap<>(); // 转换为Entry Set<Map.Entry< ...
随机推荐
- Chapter 1 Securing Your Server and Network(6):为SQL Server访问配置防火墙
原文:Chapter 1 Securing Your Server and Network(6):为SQL Server访问配置防火墙 原文出处:http://blog.csdn.net/dba_hu ...
- ZipDemo
package swing.zip; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt. ...
- 我的java学习笔记(一)
第一个java程序,还是熟悉的hello world public class FirstSample { //类 public static void main(String[] args) //方 ...
- Java得到年在一个季度的错误的第一天
1.错误叙述性说明 Exception in thread "main" java.lang.IllegalArgumentException: Cannot format giv ...
- MEF初体验之六:导出和元素据
在导出声明这一节中解释了部件导出服务和值的基础知识.在某些情况下,出于多种原因,关联与导出相关的信息是有必要的.通常,它被用来解释一个指定的普通契约实现的能力.这对于允许导入约束满足它的导出,或者导入 ...
- Web API之消息处理管道
Web API之消息处理管道 前言 MVC有一套请求处理的机制,当然Web API也有自己的一套消息处理管道,该消息处理管道贯穿始终都是通过HttpMessageHandler来完成.我们知道请求信息 ...
- Android Drawable绘图学习笔记(转)
如何获取 res 中的资源 数据包package:android.content.res 主要类:Resources Android SDK中的简介:Class for accessing an ap ...
- Java多线程的~~~synchronized加入参数,以实现独立片段
有时候,我们不希望在整个方法的前面加上synchronized这个keyword.这将使整个方法调用变得缓慢,我们只是重点 代码的地方添加这个synchronized这个keyword,然后这样就能加 ...
- Codeforces Round #277.5 (Div. 2)A——SwapSort
A. SwapSort time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- Json.NET提供依赖注
Json.NET提供依赖注 [.NET] 使用Json.NET提供依赖注入功能(Dependence Injection) 前言 在一些小型项目的开发情景里,系统不需要大型DI Framework所提 ...