【UIKit】UITableView.09 自定义cell

UITableView.09 自定义cell :



注意:在创建一个故事版的时候,需要将控制器的class修改成对应的class否则效果实现不了【如图】

1.这段代码就是用来设置cell所对应的xib,类似于绑定

   // 1.想要使用文件包里面的资源就要使用[NSBundle mainBundle]

// 2.loadNibNamed的意思是加载一个xib文件,名字为BookCell

  cell=[[[NSBundle mainBundle]loadNibNamed:@"BookCell" owner:nil options:nil]lastObject];

2. 将xib中的Label显示内容,用到下面的代码。

  1)取出对应的book对象

  2)设置内容

    // 覆盖数据
    Book *book=self.books[indexPath.row]; // 1.取出对应行的book对象

    // 设置名称
    UILabel *nameLabel=  (UILabel *)[cell viewWithTag:1]; // [cell viewWithTag]就是和对应的xib文件中的cell中的绑定tag为1的东                                    西进行绑定
    nameLabel.text=book.name; // 然后将得到的名字和相对应的空间进行绑定

    // 设置价格
    UILabel *priceLabel=(UILabel *)[cell viewWithTag:2];
    priceLabel.text=[NSString stringWithFormat:@"$%.2f",book.price];

3.设置cell的高度

#pragma mark 返回cell 的高度【设置cell的高度】
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return  70;
}

4.绑定监听器

  1)创建一个按钮collect并且设置tag

  2)将collect 绑定target,然后设置@selector调用方法

        UIButton *collect=(UIButton *)[cell viewWithTag:3]; //收藏按钮
        [collect addTarget:self action:@selector(collectBook:event:) forControlEvents:UIControlEventTouchUpInside];
    // UIControlEventTouchDragInside --单击事件

  3)单机事件后调用方法为collectBook:event

  【步骤】 得到触摸事件对象 --->  得到触摸点  ---> 得到触摸点在UITableView中的位置 ---> 得到触摸点在UITableView中的行号

#pragma mark 收藏
- (void)collectBook:(UIButton *)btn event:(UIEvent *)event // event 事件对象(包含了所有触摸点)
{

    UITableView *tableview=(UITableView *)self.view;
    // 如果是单点触碰,就只有1个UITouch (获取所有的触摸点)
   NSSet *touches= [event allTouches];// [event allTouches] 获取所有uitouch 事件,就是手指点击事件。

    //一个UITouch对象对应一根手指,能知道我们手指位置
    UITouch *touch=[touches anyObject]; // 因为touches里面只存放了1个object所以调用anyobjet就能取出我们需要的object

    // 获取触摸点再UITableView上面的位置
    CGPoint position=[touch locationInView:tableview];

   // 根据触摸位置,得到对应的行号
    NSIndexPath *indexPath=[tableview indexPathForRowAtPoint:position];
    NSLog(@"%d",indexPath.row);
  
  //根据行号,得到对应的名字
   Book *book=self.books[indexPath.row];
    NSLog(@"%@",book.name);
}


【方法2】:使用控制器连线方式

  第一步:创建Xib。

  第二步:在创建新的cell的时候,将owner设置为self,就是调用自己的控制器

   cell=[[[NSBundle mainBundle]loadNibNamed:@"BookCell" owner:self options:nil]lastObject];

  第三步:ViewController.h中声明方法为按钮单击事件方法。并且在.m文件中创建方法。

  第四步:返回Xib的控制器,设置Custom Class 设置为自己的ViewController【如图】

     

  第五步:设置好后File‘s Owner右击,会产生collectBook方法,与相对应的按钮进行连接,连接Touch up Inside事件。

     

  第六步:写全方法。就可以显示了。

-(IBAction)collectBook
{
    NSLog(@"-------");
}

  【利弊分析】:这种方法简单,但是耦合性太强。适合单页面。



【第三种】:

  第一步:创建xib拉好控件,并且设置Custom Class 为空 

     

  第二步:创建1个类与Xib 文件名相同的类,此处用BookCell。

      

  第三步:将xib中的控件进行拖拉绑定。如上图。

  第四步:取出内容

    

   // 3.1 取出本行的book对象
   Book *b= self.books[indexPath.row];

    // 设置书名
    cell.nameLabel.text=b.name;

    //  设置价格
    cell.priceLabel.text=[NSString stringWithFormat:@"$%.1f",b.price];

【UIKit】UITableView.09 自定义cell,布布扣,bubuko.com

时间: 2024-10-25 17:45:07

【UIKit】UITableView.09 自定义cell的相关文章

Swift_ uitableview使用自定义cell

uitableview 使用 xib 的自定义cell 新建cell:(假如命名 MyCell) 使用: 向 tableview 注册 nib 全局变量 let cellIdentifier = "myCell" myTableView!.registerNib(UINib(nibName: "MyCell", bundle:nil), forCellReuseIdentifier: cellIdentifier) 然后在 cellForRowAtIndexPath

第?一讲:UITableView 高级 自定义cell , cell自适应高度

一.自定义cell(包括cell的自定义,以及直接赋值的方法) 自定义cell就是创建一个UITableViewCell的子类. 把cell上的控件创建都封装在子类中,简化UIViewController中的代码 示例代码分析:(这个例子包括cell的自定义,以及直接赋值的方法) 1.需要建立tabelViewCell类, 在其中进行cell上控件的添加 2.在tabelViewCell.m中进行初始化,和layoutSubviews的frame布局的操作 tabelViewCell.h定义属性

UITableView的自定义cell

自定义UITableViewCell大致有两类方法: <一>使用nib 1.xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class) 2.调用 tableView 的 registerNib:forCellReuseIdentifier:方法向数据源注册cell [_tableView registerNib:[UINib nibWithNibName:@"xxxxxCell" bundle:nil] forCellReuse

iOS UITableView表视图(3)自定义cell

1.自定义cell 2.多种cell 的混合使用 3.cell自适应高度 自定义cell就是创建一个UITableViewCell的子类. 把cell上的控件创建都封装在子类中,简化UIViewController中的代码 子视图控件添加到cell的contentView上 cell中的控件如何显示Model中的信息? cell中声明一个Model类型的属性,viewController中获取到Model对象后赋值给cell的Model属性,cell中重写Model的setter方法,把Mode

UI学习笔记---第十一天UITableView表视图高级-自定义cell

自定义cell,多类型cell混合使用,cell自适应高度 自定义cell就是创建一个UITableViewCell的子类 把cell上的空间创建都封装在子类中,简化viewController中的代码 cell中的空间如何显示Model中的信息 cell中声明一个Model类型的属性,viewController中获取到Model对象后赋值给cell的Model属性 cell中重写Model的setter方法,把Model对象中的内容重新赋值给各个控件 M和V不直接通信,C负责M和V之间进行通

IOS开发中UITableView(表视图)的性能优化及自定义Cell

IOS开发中UITableView(表视图)的滚动优化及自定义Cell IOS 开发中UITableView是非常常用的一个控件,我们平时在手机上看到的联系人列表,微信好友列表等都是通过UITableView实现的.UITableView这个控件中的列表的每一行是一个cell,当UITableView中cell数量特别大的时候,由于每次都需要alloc分配内存并初始化,会导致app运行不流畅,所以可以使用苹果提供的几个方法进行优化,我把这个过程记录下来供自己以后查阅. 当然,既然说到优化,那我们

UI基础之UITableView案例团购----自定义cell利用xib

一:模型数据: #import <Foundation/Foundation.h> @interface LLGroup : NSObject /** * icon */ @property (nonatomic, copy) NSString *icon; /** * title */ @property (nonatomic, copy) NSString *title; /** * buyCount */ @property (nonatomic, copy) NSString *buy

UITableView(自定义cell)试水心得

初次试水自定义cell的UITableView 实现目标      最终实现结果                界面复原度:98% 未能完全复刻的地方:下半部分的tableview与头部的控件间距上的误差 原因:在做tableview时继承了tableViewController,使下半部分无法使用masnory进行位置调整. 导师建议:在整个页面内容是由tableView布局时可以选择UITableViewController作为页面的主控制器,而且由于Xcode给出的UITableViewC

UITableView自定义Cell中,纯代码编程动态获取高度

在UITableView获取高度的代理方法中,经常需要根据实际的模型重新计算每个Cell的高度.直接的做法是在该代理方法中,直接根据模型来返回行高:另 [1]-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 一种比较优雅的方式是将高度的获取方法放在一个单独的frame中[2],frame中包含了该Cell显示需要的数据模型. 但是在IOS8之后,苹果提供了一个