UITableViewCell的创建方式

  方式1 直接通过alloc:

//返回当前行显示的cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"cellForRowAtIndexPath-%ld-%ld",indexPath.section,indexPath.row);

    UITableViewCell *cell = [[UITableViewCell alloc] init];

    if (indexPath.section == 0) {
        //第一组
        if (indexPath.row == 0) {
            //第一组  第一行
            cell.textLabel.text = @"张三";
        }else if(indexPath.row == 1){
            //第一组  第2行
            cell.textLabel.text = @"李四";
        }else{
            //第一组  第3行
            cell.textLabel.text = @"王五";
        }
    }else{
        //第二组
        if(indexPath.row == 0){
            cell.textLabel.text = @"刘德华";
        }else{
            cell.textLabel.text = @"张学友";
        }
    }

    return cell;
}

  

  方式2 通过tableView的静态单元格方式,此方式只是静态的,固定的行:

  

这样就可以实现静态表格内容

  方式3 通过xib方式:

  

//返回每行显示的cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //1 创建可重用的cell
    static NSString *reuseId = @"gb";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];
    if (cell == nil) {
//        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseId];
        //从xib中加载cell
        cell = [[[NSBundle mainBundle] loadNibNamed:@"CZGroupBuyingCell" owner:nil options:nil] lastObject];

        //从xib中加载view的另一种方式
//        UINib *nib = [UINib nibWithNibName:@"CZGroupBuyingCell" bundle:nil];
//        cell = [[nib instantiateWithOwner:nil options:nil] lastObject];
    }

    //2 设置cell内部的子控件
    //2.1 获取当前要展示的数据
    CZGroupBuying *gb = self.groupBuyings[indexPath.row];
    //2.2 设置值
//    cell.textLabel.text = gb.title;
//    cell.detailTextLabel.text = [NSString stringWithFormat:@"¥%@",gb.price];
//    cell.imageView.image = [UIImage imageNamed:gb.icon];

    UILabel *titleView = (UILabel *)[cell viewWithTag:10];
    titleView.text = gb.title;

    //3 返回
    return cell;
}

自定义cell

定义cell中放入的控件,自动归为Cell的content view视图的子视图

@class CZGroupBuying;

@interface CZGroupBuyingCell : UITableViewCell
@property (nonatomic, strong) CZGroupBuying *groupBuying;

+ (instancetype)groupBuyingCellWithTableView:(UITableView *)tableView;
@end
@interface CZGroupBuyingCell ()
@property (weak, nonatomic) IBOutlet UIImageView *iconView;
@property (weak, nonatomic) IBOutlet UILabel *titleView;
@property (weak, nonatomic) IBOutlet UILabel *priceView;
@property (weak, nonatomic) IBOutlet UILabel *buyCountView;

@end

@implementation CZGroupBuyingCell
//创建自定义可重用的cell对象
+ (instancetype)groupBuyingCellWithTableView:(UITableView *)tableView
{
    static NSString *reuseId = @"gb";
    CZGroupBuyingCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];
    if (cell == nil) {
        cell = [[[NSBundle mainBundle] loadNibNamed:@"CZGroupBuyingCell" owner:nil options:nil] lastObject];
    }
    return cell;
}

//重写属性的setter方法,给子控件赋值
- (void)setGroupBuying:(CZGroupBuying *)groupBuying
{
    _groupBuying = groupBuying;

    self.titleView.text = groupBuying.title;
    self.priceView.text = [NSString stringWithFormat:@"¥ %@",groupBuying.price];
    self.buyCountView.text = [NSString stringWithFormat:@"%@人已购买",groupBuying.buyCount];
    self.iconView.image = [UIImage imageNamed:groupBuying.icon];
}
#warning 先从换成池中取,如果缓存池中没有可循环利用的cell,先去storyboard或xib中找合适的cell ,cell是从xib中创建出来的,而不是手写代码方式alloc出来的

  static NSString *reuseId = @"gb";
    CZGroupBuyingCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];从xib或storyboard中创建的cell,创建完毕后系统会调用awakeFromNib方法
/**
 *  如果cell是通过storyboard或者xib创建的,就会调用这个方法来初始化cell
 *  这个方法的作用类似于init方法
 */
- (void)awakeFromNib {
    NSLog(@"%s",__func__);
    // Initialization code
    // 自定义表格分割线
    UIView *separatorView = [[UIView alloc] init];
#warning 添加至cell的内容视图中
    [self.contentView addSubview:separatorView];

    self.separatorView = separatorView;

    separatorView.alpha = 0.5;
    separatorView.backgroundColor = [UIColor redColor];

}

不会调用initwithStyle方法 - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{

 在获取cell使用创建和赋值操作

//返回每行显示的cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //1 创建可重用的自定义的cell
    CZGroupBuyingCell *cell = [CZGroupBuyingCell groupBuyingCellWithTableView:tableView];

    //2 设置cell内部的子控件
    CZGroupBuying *gb = self.groupBuyings[indexPath.row];
    cell.groupBuying = gb;
    //3 返回
    return cell;
}

  方式4 通过storyboard 通过此方式一般是使用tableview的动态原型功能:

  

  

  获取storyboard中cell的方式

+ (instancetype)tableViewCell:(UITableView *)tableView{
#warning 先从换成池中取,如果缓存池中没有可循环利用的cell,先去storyboard中找合适的cell ,cell是从storyboard中创建出来的,而不是手写代码方式alloc出来的
    // 此标识要和storyboard 本控制器中的动态cell设置的identify标识一致
    static NSString *ID = @"contactCell";
    return [tableView dequeueReusableCellWithIdentifier:ID];
}

通过tableview dequeueReusableCellWithIdentifier:ID 系统就会去storyboard中找合适的cell

/**
 *  如果cell是通过storyboard或者xib创建的,就会调用这个方法来初始化cell
 *  这个方法的作用类似于init方法
 */
- (void)awakeFromNib {
    NSLog(@"%s",__func__);
    // Initialization code
    // 自定义表格分割线
    UIView *separatorView = [[UIView alloc] init];
#warning 添加至cell的内容视图中
    [self.contentView addSubview:separatorView];

    self.separatorView = separatorView;

    separatorView.alpha = 0.5;
    separatorView.backgroundColor = [UIColor redColor];

}
时间: 2024-11-09 13:02:32

UITableViewCell的创建方式的相关文章

String变量的两种创建方式

在java中,有两种创建String类型变量的方式: String str01="abc";//第一种方式 String str02=new String("abc")://第二种方式 第一种方式创建String变量时,首先查找JVM方法区的字符串常量池是否存在存放"abc"的地址,如果存在,则将该变量指向这个地址,不存在,则在方法区创建一个存放字面值"abc"的地址. 第二种方式创建String变量时,在堆中创建一个存放&q

RDD之三:RDD创建方式

RDD创建方式 1)从Hadoop文件系统(如HDFS.Hive.HBase)输入创建.2)从父RDD转换得到新RDD.3)通过parallelize或makeRDD将单机数据创建为分布式RDD. 4)基于DB(Mysql).NoSQL(HBase).S3(SC3).数据流创建. 从集合创建RDD parallelize def parallelize[T](seq: Seq[T], numSlices: Int = defaultParallelism)(implicit arg0: Clas

控制器的创建方式 -- 及其导航控制器的管理

一 控制器的创建方式 1.storyboard创建 1 self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 2 3 self.window.backgroundColor = [UIColor blueColor]; 4 5 UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 6 7 /

视图控制器的View创建方式

UIViewContrller 有三种创建方式: 1.通过alloc init直接创建. 2.通过故事版创建. 3.通过xib文件描述. 这是appDelegate.m的内容 //window的颜色是绿色 self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds]; self.window.backgroundColor = [UIColor greenColor]; /** 第一种:直接alloc ini

iOS控制器的创建方式

iOS控制器的创建.除了常见的alloc init外还有通过加载storyboard和xib的方式,下边逐一展开: 1.代码alloc init 创建方式 ViewController *vc= [[ViewController alloc] init]; 2.storyboard创建控制器 1>加载制定的storyboard文件 UIStoryboard *board =     [UIStoryboard storyboardWithName:@"viewCon" bundl

JAVA学习第二十三课(多线程(二))- (多线程的创建方式二 :实现Runnable接口(常用))

当一个类有父亲,但是其中的功能还希望实现线程,那么就不能采用继承Thread的方式创建线程 那么就可以通过接口的方式完成 准备扩展Demo类的功能,让其中的内容可以作为线程的任务执行 实现Runnable接口,Runnable接口中只有一个方法run 一.创建线程的第二种方法 Runnable的出现仅仅是将线程的任务进行了对象的封装 /* * 创建线程的第二种方法 * 1.定义类实现Runnable接口 * 2.覆盖接口中的fun方法,将线程的任务代码封装到run方法中 * 3.通过Thread

iOS学习4_控制器的创建方式和控制器view的创建

UIScreen是与设备有关的物理屏幕 Window是一个窗口对应UIWindow类,继承自UIView,window要显示在Screen上必须设置为主窗口并且可见.接下来就可以往UIWindow上面添加一些控件了. 下图就是简单地层次关系 ViewController是用来组织和控制视图的,与上图不同的是这里使用了视图控制器ViewController,不需要直接将view指定给window,相反,只需要给window制定一个视图控制器,视图控制器会自动的将他的view添加给window.如下

控制器创建方式

三种创建方式: 1.通过代码创建(个人建议:虽然代码创建繁琐,但是还是觉得代码才是王道) 2.通过xib创建: 优点:能够用拖控件的方式来描述一个View里面的情况 缺点:和storyboard相比需要在File's Owner的Class属性中设置所属自定义控制器,并且要设置控制器所属View(连线) 3.通过storyboard创建 优点:能够用拖控件的方式来描述一个View里面的情况,如果设置了storyboard为Mainstoryboard的话,就可以免去代码创建Window等的步骤,

Java---11---多线程的两种创建方式

多线程的两种创建方式: 下面这些东西是API文档中的: public class Thread extends Object implements Runnable 线程 是程序中的执行线程.Java 虚拟机允许应用程序并发地运行多个执行线程. 每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程.每个线程都可以或不可以标记为一个守护程序.当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护