您的当前位置:首页正文

创建单元格

2024-11-08 来源:个人技术集锦

1.

1)新建.xib文件,且设置好想要的效果

2)在属性栏中设置Identifier属性,属性值将在代码中用到。

 

2.新建SimpleTabelCell.m和SimpleTabelCell.h文件,且继承UITableViewCell类。

3.定义三个变量

.h中:

 

@interfaceSimpleTabelCell : UITableViewCell

//定义三个实例变量

@property(nonatomic,weak)IBOutlet UILabel*nameLabel;

@property(nonatomic,weak)IBOutlet UILabel*prepTimeLabel;

@property(nonatomic,weak)IBOutlet UIImageView*thumbnailImageView;

@end

 

.m中:

 

#import "SimpleTabelCell.h"

 

@implementationSimpleTabelCell

//@synthesize关键字告诉编译器自动生成代码,用来访问前面定义的属性。

@synthesizenameLabel = _nameLabel;

@synthesizeprepTimeLabel = _prepTimeLabel;

@synthesizethumbnailImageView = _thumbnailImageView;

 

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

{

    self = [super initWithStyle:stylereuseIdentifier:reuseIdentifier];

    if (self) {

        //Initialization code

    }

    return self;

}

 

- (void)setSelected:(BOOL)selectedanimated:(BOOL)animated

{

    [super setSelected:selected animated:animated];

 

    // Configurethe view for the selected state

}

 

@end

 

4.ViewController中修改代码:

如下:

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{//提供表视图单元格所需要的数据。   

    static NSString* simpleTableIdentifier = @"SimpleTableItem";

    //该语句为表视图单元格提供了一个标识,当上面的单元格滚出屏幕,下面的单元格滚入屏幕时候,可以通过判断这个标识是否有可以重用的单元格,如果有则重用,如果没有则创建一个新的。

   

    SimpleTabelCell* cell = (SimpleTabelCell*)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell== nil) {

        NSArray*nib = [[NSBundle mainBundle]loadNibNamed:@"SimpleTabelCell"owner:selfoptions:nil];

        cell = [nib objectAtIndex:0];

    }

 

    cell.nameLabel.text =  [tabelData objectAtIndex:indexPath.row];

    cell.thumbnailImageView.image = [UIImageimageNamed:@"MS10020200_p02_btn_02_all_4"];

    returncell;

}

 

.xib与.storyboard结合使用时:要加Identifier值

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

    NSString *CellIdentifier ;

    //自己子类化的UITableViewCell

    PersonTableCell * lableSwitchCell;

    UINib *n;

    if([indexPath section ] == 0 ) {

        CellIdentifier = @"PersonTableXibCell";

        lableSwitchCell  = (PersonTableCell*)[tableViewdequeueReusableCellWithIdentifier:CellIdentifier];

        if(lableSwitchCell == nil) {

            NSArray*_nib=[[NSBundle mainBundle]loadNibNamed:@"PersonTableCell"

                                                       owner:self  options:nil];

            lableSwitchCell  = [_nib objectAtIndex:0];

            //通过这段代码,来完成LableSwitchXibCellReuseIdentifier的设置

            //这里是比较容易忽视的,若没有此段,再次载入LableSwitchXibCell时,dequeueReusableCellWithIdentifier:的值依然为nil

            n= [UINibnibWithNibName:@"PersonTableCell"bundle:[NSBundlemainBundle]];

            [self.tableView registerNib:nforCellReuseIdentifier:@"PersonTableXibCell"];

        }

    }

    returnlableSwitchCell;

   

}

 

 

 

并添加函数:《因为自己设置的单元格高度改变了。所以要此方法》

-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath{

    return 78;

}

 

5。点击某个单元格时,添加事件。(重写方法)

- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{

 

}

 

 

6.选中状态:《支持单行选择

1)在controller.m中添加

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{//提供表视图单元格所需要的数据。   

……

 //支持单行选择

    NSIndexPath*selection = [tableView indexPathForSelectedRow];

    if(selection && selection.row ==indexPath.row) {

        cell.accessoryType= UITableViewCellAccessoryCheckmark;

    }else{

        cell.accessoryType= UITableViewCellAccessoryNone;

    }

……

2)在- (void)tableView:(UITableView *)tableViewdidSelectRowAtIndexPath:(NSIndexPath *)indexPath{

……

SimpleTabelCell *cell= (SimpleTabelCell*)[tableView cellForRowAtIndexPath:indexPath];cell.accessoryType = UITableViewCellAccessoryCheckmark;

……

3)在controller.m中添加方法

-(void)tableView:(UITableView*)tableView didDeselectRowAtIndexPath:(NSIndexPath*)indexPath{

 

    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone;

}

7.选中状态:《支持多行选择

 

 

 

 

调用 tableView 对象的 indexPathForSelectedRow 方法, 迒回表规图中所有选择的行。

 

任何时候在一个对象需要完成特定任务时,它依赖于另外一个对象去负责处理。这个在系统设计领域通常称为关注点分离(Separation of Concern)。

显示全文