按钮

  • 自定义按钮:调整内部子控件的frame

    • 方式1:实现titleRectForContentRect:和imageRectForContentRect:方法,分别返回titleLabel和imageView的frame
    • 方式2:在layoutSubviews方法中设置
  • 内边距
// 设置按钮内容的内边距(影响到imageView和titleLabel)
@property(nonatomic) UIEdgeInsets contentEdgeInsets;
// 设置titleLabel的内边距(影响到titleLabel)
@property(nonatomic) UIEdgeInsets titleEdgeInsets;
// 设置imageView的内边距(影响到imageView)
@property(nonatomic) UIEdgeInsets imageEdgeInsets;

图片拉伸

  • iOS5之前
// 只拉伸中间的1x1区域
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight;
  • iOS5开始
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets;
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode;

拷贝

  • 实现拷贝的方法有2个

    • copy:返回不可变副本
    • mutableCopy:返回可变副本
  • 普通对象实现拷贝的步骤
    • 遵守NSCopying协议
    • 实现-copyWithZone:方法
      • 创建新对象
      • 给新对象的属性赋值

KVC

  • 全称:Key Value Coding(键值编码)
  • 赋值
// 能修改私有成员变量
- (void)setValue:(id)value forKey:(NSString *)key;
- (void)setValue:(id)value forKeyPath:(NSString *)keyPath;
- (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues;
  • 取值
// 能取得私有成员变量的值 - (id)valueForKey:(NSString *)key; - (id)valueForKeyPath:(NSString *)keyPath; - (NSDictionary *)dictionaryWithValuesForKeys:(NSArray *)keys;
 
 
 
// 字典转模型
    // 字典value是什么类型,给模型的属性就是什么类型
    [flag setValuesForKeysWithDictionary:dict];
    // setValuesForKeysWithDictionary:KVC字典转模型
    // 1.遍历字典里面所有key name,icon
    // 2.会去模型中查找,有没有对应的属性或者方法,如果有就属性赋值
 
[flag setValue:@"zhongguo.jpg" forKey:@"icon"]
 1.寻找有没有setIcon方法,有,就直接调用方法去赋值[flag setIcon:@"zhongguo.jpg"]
 2.寻找有没有icon属性,有,直接赋值 icon = icon;
 3.寻找有没有_icon属性,有,直接赋值 _icon = icon;
 4.找不到,直接报错setValue:forUndefinedKey:
 
 模型的属性名一定要跟字典的key一一对应
 
 

KVO

  • 全称:Key Value Observing(键值监听)
  • 作用:监听模型的属性值改变
  • 步骤
    • 添加监听器

      // 利用b对象来监听a对象name属性的改变
      [a addObserver:b forKeyPath:@"name" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:@"test"];
    • 在监听器中实现监听方法
      -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change     context:(void *)context
      {
      NSLog(@"%@ %@ %@ %@", object, keyPath, change, context);
      }
 

最新文章

  1. CocoaPods报错:The dependency `AFNetworking ` is not used in any concrete target 解决办法
  2. sp_who使用
  3. Phpcms V9网站从本地上传到服务器需要修改的地方
  4. HTML-Audio/Video
  5. BZOJ 1631==USACO 2007== POJ 3268 Cow Party奶牛派对
  6. IOT表优缺点
  7. Struts2学习笔记(七)——类型转换
  8. oracle中求1到100之间的质数和
  9. Dynamics CRM 日常使用JS整理(二)
  10. python2和python3的range(100)的区别
  11. 使用FormData进行Ajax请求上传文件
  12. python网络爬虫学习笔记(一)Request库
  13. 50-2018 蓝桥杯省赛 B 组模拟赛(五)
  14. 世界地图和主要国家的 JSON 文件
  15. Linux命令行与shell脚本编程大全.第3版(文字版) 超清文字-非扫描版 [免积分、免登录]
  16. Spring Boot 2.0 热部署指南
  17. SQLServer 索引重建
  18. i春秋CTF web题(1)
  19. 【硅谷问道】 WWDC 17: 开发者的最初观感
  20. Struts2(四)属性驱动和模型驱动

热门文章

  1. 【计算几何初步-判断是否凸多边形】【HDU2108】Shape of HDU
  2. hive大数据倾斜总结
  3. RocketMQ与Kafka对比(18项差异)评价版
  4. AAC ADTS解析
  5. Category类别
  6. 今天进行了一次IOS面试,分享一下面试结果
  7. bootstrap 之 列表组件使用
  8. [转]标准C++字符串string以及MFC6.0字符串CString的tokenize和split函数
  9. 《javascript权威指南》阅读笔记 1
  10. 自己动手打造html5星际迷航!