自定义cell

自定义cell

http://img1.sycdn.imooc.com//climg/5b5584d90001067010380860.jpg

为什么点击之后会出现这种情况 是哪里出什么问题了吗

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

查看下运行之后tableView的cell的显示是否正确,然后查看点击cell的代理方法didSelectRowAtIndexPath:中代码是否与老师的代码一致。祝学习愉快~


提问者 盛益华通 2018-07-23 17:19:14
提问者 盛益华通 2018-07-23 17:18:05

viewcontroller.m中代码如下

#import "ViewController.h"

#import "okTableViewCell.h"

@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>{

    UITableView*tabview;

    NSArray*datarray;

}


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    datarray=@[@"北京",@"东京",@"南京",@"西经"];

    

    tabview=[[UITableView alloc]initWithFrame:CGRectMake(0, 20, 414, 600)];

    [self.view addSubview:tabview];

    

    tabview.delegate=self;

    tabview.dataSource=self;

}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{

    return 1;

}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    return 4;

}

//确定cell的内容

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

    

    NSString*cityName=[datarray objectAtIndex:indexPath.row];

    okTableViewCell*cell2=[okTableViewCell createCellWithTableView:tabview];

    [cell2 setCellText:cityName];//内容

    [cell2 setCheckStatus:false];//状态

    return cell2;

}

//实现响应方法

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

    //先获取点击到哪一行

    okTableViewCell*cell0=[tableView cellForRowAtIndexPath:indexPath];

    //获取当前cell单元的状态

    BOOL currentFlag=cell0.selectedFlag;

    //实现每次点击当前状态发生转换

    [cell0 setCheckStatus:!currentFlag];

}

@end

oktabelviewcell.m的代码如下

#import "okTableViewCell.h"


@interface okTableViewCell(){

    UIImageView*picview;

    UILabel*lab;

}

@end

//cell=cell创建+cell内容加载:将控件添加到cell 将控件的内容填充

@implementation okTableViewCell


+(instancetype)createCellWithTableView:(UITableView*)tableview{

    static NSString*ID=@"zm";

    okTableViewCell*okcell=[tableview dequeueReusableCellWithIdentifier:ID];

    if (okcell==nil) {

        okcell=[[okTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];

    }

    return okcell;

}

//将控件添加到cell

//1此方法的调用场景 1 设置frame时 2 addsubview时 3 view的frame信息变化时

-(void)layoutSubviews{

    //设置imageview和label的frame信息

    CGFloat igeX=self.frame.size.width-30-10;

    CGFloat igeY=(self.frame.size.height-30)/2;

    CGFloat igeH=30;

    CGFloat igeW=30;

    picview.frame=CGRectMake(igeX, igeY, igeW, igeH);

    //将picview添加到cell上

    [self addSubview:picview];

    

    CGFloat labX=10;

    CGFloat labY=0;

    CGFloat labH=100;

    CGFloat labW=self.frame.size.height;

    lab.frame=CGRectMake(labX, labY, labW, labH);

    [self addSubview:lab];

    

}

//将控件的内容填充

//表明当前状态 将方法公开

-(void)setCheckStatus:(BOOL)flag{

    //将外部传递进来的flag设置给self.selectedFlag

    self.selectedFlag=flag;

    //判断当前是否有imageview

    if (picview==nil) {

        picview=[[UIImageView alloc]init];

    }

    if (self.selectedFlag) {

        picview.image=[UIImage imageNamed:@"checked"];

    }else{

        picview.image=[UIImage imageNamed:@"unchecked"];

    }

}

-(void)setCellText:(NSString*)str{

    if (lab==nil) {

        lab=[[UILabel alloc]init];

    }

    lab.text=str;

    lab.textColor=[UIColor blueColor];

    lab.font=[UIFont systemFontOfSize:20];

}


- (void)awakeFromNib {

    [super awakeFromNib];

    // Initialization code

}


- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

    [super setSelected:selected animated:animated];


    // Configure the view for the selected state

}


@end

麻烦老师帮忙调试看看哪里出了问题


  • 1、 lab.frame=CGRectMake(labX, labY, labW, labH);这个lab的frame设置的有问题,仔细检查下labW、labH是否正确。 2、okTableViewCell*cell2=[okTableViewCell createCellWithTableView:tabview];这里应该传入的是tableView,不是tabview 3、okTableViewCell*cell0=[tableView cellForRowAtIndexPath:indexPath];这里的tableView代表当前用户操作的那个tableView 祝学习愉快~
    2018-07-23 18:21:15
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
iOS进阶:界面优化与数据存储
  • 参与学习       516    人
  • 提交作业       158    份
  • 解答问题       637    个

本路径采用基础+案例方式,助你解开对界面优化、数据储存、屏幕适配的疑惑。6小时团购项目实战加最新版本Swift讲解,让你掌握更多iOS开发技巧。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师