zoukankan      html  css  js  c++  java
  • iOS基础

    1. 继承UITableViewController默认会设置数据源和代理,并且会自动遵守数据源和代理协议,并且self.tableView 相当于 self.view

    2.更换控制器时,注意把storyboard中之前的控制器给删了,然后在重新拖一个进来,并且设置他的class为新的控制器。就能在加载程序的时候,进入新的控制器。

    3.自定义cell例子思路引导

    步骤一:创建xib,描述自定义cell的外观。(UIImageView,3UILabel

    步骤二取消Autolayout

    步骤三:实现数据源方法

    1. 定义可重用标识
    2. 从缓冲池里取cell
    3. 判断cell是否为空,如果为空,就手动创建
    4. 设置cell的内容

    步骤四:通过代理方法,设置cell的高度。

    补充:如果所有行一样,用rowHeigth属性设置高度,不一样用代理设置高度。

    步骤五:设置xib中重用标识符。

    步骤六:创建模型对象Newstitle,icon,comments,author

    步骤七:解析pilst文件转成模型数据

    步骤八:创建自定义cell类,并且属性与xib连线。(不要依赖控制器)

    步骤九:自定义cell提供一个类方法接口给外界。

    步骤十:在外界直接使用自定义cell

    4.自定义视图的步骤

    1.创建xib,描述自定义视图。

    2.xib的名称最好跟自定义视图名称相似。

    3.创建自定义视图类,类名和xib名字相同

    4.将自定义视图和xib关联,告诉xib描述哪个自定义视图。即更改xib里的class为自定义类

    5.绑定之后,然后让自定义视图类的属性和xib中的控件连线。

    6.连线成功,点击小实点,能看下xib上的控件外部有框框就OK了。

    7.在自定义视图类中给外界提供类方法接口,用来返回一个自定义视图类,方法名以自己类名开头。

    8.实现自定义视图类方法

    9.自定义视图创建成功,在外界直接导入头文件就能使了。

    10.运行效果

    5. 属性的名称和方法名称不要以new开头

    6. 自定义视图是UITableViewCell,描述它的xib一定要设置重用标识。

    7. 封装cell的步骤

    1. 新建xib描述cell的样子---DealCell.xib

    2.新建UITableViewCell的子类---DealCell(封装xib内部的所有东西)

    注意xib名称要和类名名称一样

    3. 修改xib中cell的类名(class)为DealCell

    4.DealCell中拥有xib中的所有子控件(声明属性、进行连线)

    5.新建模型Deal,封装数据,名字也要取得有意义。

    6. 给DealCell增加模型属性

    @property (nonatomic, strong) Deal *deal;

    7. 重写setDeal:方法,在这个方法中根据模型数据设置cell内部子控件的属性

    8.提供一个类方法,返回从xib中创建好的cell对象

    + (id)dealCell;

    + (id)dealCell

    {

    return [[NSBundle mainBundle] loadNibNamed:@"DealCell" owner:nil            options:nil][0];

    }

    9.xib中的cell添加一个重用标识(比如deal),提供一个类方法,返回重用标识

    10.提供一个类方法,返回cell的高度

    + (CGFloat)cellHeight;

    + (CGFloat)cellHeight

    {

        return 80;

    }

    11.在控制器中导入自定义cell的头文件就能使用了。

    8. 设置每一行高度

    每一行cell高度一样,使用这个方法

    每一行,高度不一样,使用代理方法

    9. 微博小例子思路(用代码自定义cell)

    思路:项目中cell中内部控件高度不一样,最好用代码创建自定义cell

    步骤一:创建自定义cell

    步骤二:在下面方法中描述cell

    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier

    1. 添加内部的子控件到contentView上面(先不管位置和内容)
    2. 创建微博模型
    3. 给微博模型提供一个类方法,将字典转换为模型。
    4. 给自定义cell添加微博模型,重写set方法,设置cell子控件的数据和位置
    5. 设置数据
    6. 设置位置

    位置计算注意:计算文字高度时,如果UILabel不需要换行,根据字体算出尺寸,使用以下方法。

    - (CGSize)sizeWithFont:(UIFont *)font;

    如果UILabel需要换行,使用使用以下方法.

    5.由于返回每一行高度比返回每一行cell内容先调用。因此获取每一行的高度,不能直接从cell对象中获取,因为那时候还没创建cell对象,因此我们需要另外创建一个模型,用来管理cell内部所有子控件的framecell的总高度。

    6.viewDidLoad方法中,就将cellFrame模型用数组保存起来.

    7.实现数据源方法。

    10. 注册一个xib文件

    如果tableView通过identifier这个标志去缓冲池中没有取到可循环利用的cell,就会加载xib文件来创建。

    - (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier

    11. 注册自定义单元格

    如果tableView通过identifier这个标志去缓冲池中没有取到可循环利用的cell,就会加载cellClass类来创建。

    -(void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier

    12.UITableViewCell里只有一个子控件contentView,即使xib中将子控件拖入cell中,但是是假象,实际上苹果帮我们已经将子控件添加到contentView.

    一、加载xib文件的两种方式 1.方法一(NewsCell是xib文件的名称) NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"NewsCell" owner:nil options:nil];

    2.方法二 UINib *nib = [UINib nibWithNibName:@"NewsCell" bundle:nil]; NSArray *objects = [nib instantiateWithOwner:nil options:nil];

    二、设置cell的高度 1.如果每一行cell的高度都是一样的,直接使用tableView的rowHeight属性设置cell的高度即可 tableView.rowHeight = 80;

    2.如果每一行cell的高度不一定一样,应该用代理方法设置cell的高度 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {     // 返回indexPath这行对应cell的高度     return 80; }

    三、UITableViewController 1.UITableViewController内部默认会创建一个UITableView *tableView 2.UITableViewController内部tableView的delegate(代理)和dataSource(数据源)就是这个UITableViewController 3.UITableViewController内部tableView就是控制器的view

    四、自定义cell 1.通过xib 1> 一定要注意在xib的cell中设置重用标识(reuse identifier)

    2> 封装的步骤 * 新建xib描述cell的样子---DealCell.xib * 新建UITableViewCell的子类---DealCell(封装xib内部的所有东西) * 修改xib中cell的类名(class)为DealCell * 在DealCell中拥有xib中的所有子控件(声明属性、进行连线) * 新建模型Deal,封装数据 * 给DealCell增加模型属性 @property (nonatomic, strong) Deal *deal; * 重写setDeal:方法,在这个方法中根据模型数据设置cell内部子控件的属性 * 提供一个类方法,返回从xib中创建好的cell对象 * 给xib中的cell添加一个重用标识(比如deal),提供一个类方法,返回重用标识 * 提供一个类方法,返回cell的高度

    3> 使用cell * 设置每一行cell的高度 * 利用重用标识去缓存池取得cell * 如果缓存池没有cell,创建cell * 传递模型给cell

    2.通过代码 1> 新建一个UITableViewCell的子类---WeiboCell

    2> 在创建cell的时候(initWithStyle:reuseIdentifier:方法中)添加cell内部需要使用的子控件 (注意:只管创建添加子控件,先不要去管子控件的位置和尺寸)

    3> 新建一个模型类---Weibo,增加对应的数据属性

    4> 给WeiboCell增加一个Weibo模型属性,在拿到Weibo模型数据的同时设置子控件的属性

    5> 重写setWeibo:方法,在这里面取出Weibo模型的数据显示到子控件上

    五、UITableView方法补充 1.如果tableView通过@"Cell"这个标志去缓存池中没有取到可循环利用的Cell,就会加载MyCell1.xib文件来创建cell [self.tableView registerNib:[UINib nibWithNibName:@"MyCell1" bundle:nil] forCellReuseIdentifier:@"Cell"];

    2.如果tableView通过@"cell2"这个标志去缓存池中没有取到可循环利用的Cell,就会创建MyCell2对象作为cell [self.tableView registerClass:[MyCell2 class] forCellReuseIdentifier:@"cell2"];

  • 相关阅读:
    使用jQuery操作DOM(ppt练习)
    使用jQuery操作dom(追加和删除样式-鼠标移入移出)练习
    Serializable接口
    过滤选择器(接上)
    内容过滤选择器
    基本过滤选择器
    IO流
    C语言打印100到200之间的素数
    续上篇结尾应用异或关系改变两个变量的值
    将两个整型变量的值互换的方法
  • 原文地址:https://www.cnblogs.com/monicaios/p/3502557.html
Copyright © 2011-2022 走看看