正在回答
查看下运行之后tableView的cell的显示是否正确,然后查看点击cell的代理方法didSelectRowAtIndexPath:中代码是否与老师的代码一致。祝学习愉快~
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
麻烦老师帮忙调试看看哪里出了问题
- 参与学习 516 人
- 提交作业 158 份
- 解答问题 637 个
本路径采用基础+案例方式,助你解开对界面优化、数据储存、屏幕适配的疑惑。6小时团购项目实战加最新版本Swift讲解,让你掌握更多iOS开发技巧。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星