一、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补充的更多相关文章

  1. C#图解教程 第十一章 枚举

    枚举 枚举 设置底层类型和显式值隐式成员编号 位标志 Flags特性使用位标志的示例 关于枚举的补充 枚举 枚举 枚举是由程序员定义的类型与类或结构一样. 与结构一样,枚举是值类型,因此直接存储它们的 ...

  2. Java研究

    Strap   箱线图  峰度  随机过程  马尔科夫  超几何分布  贝叶斯公式 随机变量    德摩根   功率谱   残差  吸收壁   平稳随机    chorst 深入JVM OSGI    ...

  3. for循环枚举法,全排列+dfs,补充浮点数注意事项

    其实这个题目我一直没想好应该叫什么,就是在做蓝桥杯的时候会遇到很多的题,给你一等式,abcdef...分别是1-9(||12||15)不重复问你有几种方案? 我之前一直都是用的for循环在做,听说这叫 ...

  4. NX二次开发-Block UI C++界面Enumeration(枚举)控件的获取(持续补充)

    NX9+VS2012 public: void SetBlockUIShow(); void EnumInt::SetBlockUIShow() { //获取枚举控件 PropertyList* En ...

  5. IOS UIButton 自定义的补充学习

    一直自定按钮 遇到两个做的不好的地方. 1 是按钮响应方法时候状态自定义不好看 按压感不明显 2 是button上的title 是我自己用label写上去的 而不是用button的属性 这两天终于运用 ...

  6. IOS UI-Button按钮

    #import "ViewController.h" @interface ViewController () { UILabel *lable; BOOL moveFlag; N ...

  7. 编写高质量代码:改善Java程序的151个建议(第6章:枚举和注解___建议88~92)

    建议88:用枚举实现工厂方法模式更简洁 工厂方法模式(Factory Method Pattern)是" 创建对象的接口,让子类决定实例化哪一个类,并使一个类的实例化延迟到其它子类" ...

  8. 4. UIButton的使用

    1. UIButton的初认识 来自:http://www.cnblogs.com/mcj-coding/p/5103891.html QQ:853740091 1.1 UIButton 是iOS 开 ...

  9. Map以及Set的遍历(EntrySet方法,补充enumeration和Iterator的区别)

    public void mearge(Map map) { Map returnMap = new HashMap<>(); // 转换为Entry Set<Map.Entry< ...

随机推荐

  1. 【原创】构建高性能ASP.NET站点 第五章—性能调优综述(后篇)

    原文:[原创]构建高性能ASP.NET站点 第五章-性能调优综述(后篇) 构建高性能ASP.NET站点 第五章—性能调优综述(后篇) 前言:本篇主要讲述如何根据一些简单的工具和简单的现象来粗布的定位站 ...

  2. iOS 中国排序

    这里分享一个中国某种方便的方法,我们放在一起的人脉资源后,方便的类别,使用自己的包, 此处所使用的方法贴,源代码可以在本文的结尾下载. 要记得加头文件 #import "NSArray+So ...

  3. 集成ejs和angular

    我们也有一个系统angular用在应用中单页.正确angular做一些定制.集成seajs.不实用angular自己的模块管理. 只要angular也可单独使用在,一个较小的系统新开发,我不会用前js ...

  4. 获取鼠标点击相对于Canva位置的2种方法

    如果给Canvas添加 onmousedown事件,获取到的鼠标位置都是相对于当前文档的位置(x,y):

  5. DP Leetcode - Maximum Product Subarray

    近期一直忙着写paper,非常久没做题,一下子把题目搞复杂了..思路理清楚了非常easy,每次仅仅需更新2个值:当前子序列最大乘积和当前子序列的最小乘积.最大乘积被更新有三种可能:当前A[i]> ...

  6. 82. NotesclientPrint相同的信息,以状态栏的问题

    这可能是一个小问题.但其他人也应该得到满足.在Notesclient使用LotusScript的Print当该语句是输出到状态栏,假设实际参数传递多次调用相同,状态栏将显示只有一次的信息. 例如: P ...

  7. Android清除缓存功能来实现

    我们都知道在Android的设置->应用程序中能够查看应用程序的相关信息,当中有一个功能是清除缓存. 如图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZ ...

  8. 仿jQuery之链式调用

    链式调用的形式其实就是对象调用一连串的方法.为什么能连续调用这么多的方法?因为调用方法返回调用的对象,于是乎就可以一如既往,一往无前地调用下去.链式调用的原理就是在方法中返回执行上下文this,每次调 ...

  9. 一张地图告诉你,只JavaScript不够!

    这将是JavaScript语法,你真的会一JavaScript嘛.看看这个图片!超好用JavaScript一本书的摘录游.熊儿.快去学习! 版权声明:本文博客原创文章.博客,未经同意,不得转载.

  10. Linux学习笔记——举例说,makefile 添加宏定义

    0.前言     从学习C语言開始就慢慢開始接触makefile,查阅了非常多的makefile的资料但总感觉没有真正掌握makefile.假设自己动手写一个makefile总认为非常吃力. 所以特意 ...