• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ios > 自定义UITableViewdataSource的cellForRowAtIndexPath方法没被执行

自定义UITableViewdataSource的cellForRowAtIndexPath方法没被执行

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了自定义排序方法,自定义控件方法,自定义view构造方法,c#自定义控件方法,jquery自定义方法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 自定义UITableView dataSource的cellForRowAtIndexPath方法没被执行
描述:

自定义一个tableview,但是主控制器中实现之后,没有加载cell,打断点,发现cellForRowAtIndexPath:(NSIndexPath *)indexPath方法没有进入,就是没有被调用。下面是自定义UITableView的代码:
.h文件

#import <UIKit/UIKit.h>
#import "GCProductModel.h"

@interface RecommendComView : UITableView
@property(nonatomic,strong) NSMutableArray *productsArr;
@property (nonatomic,strong) UIButton *unfoldBtn;
-(void) setButtonUnFoldStatus;
-(void)setButtonFoldStatus;
@end    #import "RecommendComView.h"

.m文件
#import "UIColor+DecColor.h"
#define DEVICE_WIDTH [UIScreen mainScreen].bounds.size.width
#define DEVICE_HEIGHT [UIScreen mainScreen].bounds.size.height
static const CGFloat viewHeight = 44.0f;
static const CGFloat navigationHeight = 64.0f;

@interface RecommendComView()
@property (nonatomic,strong) UILabel *desLbl;
@property (nonatomic,strong) UIView *headerView;
@end

@implementation RecommendComView

-(instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
{
    if(self=[super initWithFrame:frame style:style])
    {

        _unfoldBtn = [[UIButton alloc]init];
        _desLbl = [[UILabel alloc] init];
        
        //设置btn
        [self setButtonUnFoldStatus];
        //设置label
        _desLbl.font = [UIFont fontWithName:@"PingFangSC-Regular" size:13.0f];
        _desLbl.textColor = [UIColor decColorWithRed:46 green:46 blue:46 alpha:1];
        
        [self setFrame:CGRectMake(0, navigationHeight, DEVICE_WIDTH, viewHeight*4)];
        //设置headerview
        _headerView = [[UIView alloc]initWithFrame:CGRectMake(0,0, DEVICE_WIDTH, viewHeight)];
        
        UIBlurEffect * blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
        //  毛玻璃视图
        UIVisualEffectView * effectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
        effectView.backgroundColor = [UIColor decColorWithRed:252 green:252 blue:252 alpha:0.08f];
        //添加到要有毛玻璃特效的控件中
        effectView.frame = self.bounds;
        [self addSubview:effectView];
        
        //设置底层透明度
        self.backgroundColor = [UIColor decColorWithRed:255 green:255 blue:255 alpha:0.85];
        self.scrollEnabled = NO;
        self.tableHeaderView = _headerView;
    }
    return self;
}

-(void) layoutSubviews
{
    //设置button的Frame
    [_unfoldBtn setFrame:CGRectMake(DEVICE_WIDTH-15-26, 15.5, 26, 13)];
    [self.headerView addSubview:_unfoldBtn];
    [self.headerView addSubview:_desLbl];
}
#pragma mark - setButtonStatus
-(void) setButtonUnFoldStatus
{
    [_unfoldBtn setTitle:@"展开" forState:UIControlStateNormal];
    _unfoldBtn.titleLabel.font = [UIFont fontWithName:@"PingFangSC-Regular" size:13.0f];
    [_unfoldBtn setTitleColor:[UIColor decColorWithRed:255 green:100 blue:100 alpha:1] forState:UIControlStateNormal];
}
-(void)setButtonFoldStatus
{
    [_unfoldBtn setTitle:@"收起" forState:UIControlStateNormal];
    _unfoldBtn.titleLabel.font = [UIFont fontWithName:@"PingFangSC-Regular" size:13.0f];
    [_unfoldBtn setTitleColor:[UIColor decColorWithRed:255 green:100 blue:100 alpha:1] forState:UIControlStateNormal];
}


-(void) setProductsArr:(NSMutableArray *)productsArr
{
    _productsArr = productsArr;
    _desLbl.text = [NSString stringWithFormat:@"共有%lu件商品" ,(unsigned long)_productsArr.count];
    [_desLbl sizeToFit];
    
    //设置商品图标
    if(_productsArr.count<3)
    {
        for(int i = 0;i<_productsArr.count;i++)
        {
            GCProductModel *product = _productsArr[i];
            UIImageView *imgView = [[UIImageView alloc]initWithFrame:CGRectMake(15+36*i, 6, 32, 32)];
            imgView.image = [UIImage imageNamed:product.coverImg];
            imgView.backgroundColor = [UIColor redColor];
            [_headerView addSubview:imgView];
        }
        [_desLbl setFrame:CGRectMake(15+36*_productsArr.count+4, 15.5, _desLbl.frame.size.width, _desLbl.frame.size.height)];
    }else
    {
        for(int i = 0;i<3;i++)
        {
            GCProductModel *product = _productsArr[i];
            UIImageView *imgView = [[UIImageView alloc]initWithFrame:CGRectMake(15+36*i, 6, 32, 32)];
            imgView.image = [UIImage imageNamed:product.coverImg];
            imgView.backgroundColor = [UIColor redColor];
            [_headerView addSubview:imgView];
        }
        [_desLbl setFrame:CGRectMake(15+36*3+4, 15.5, _desLbl.frame.size.width, _desLbl.frame.size.height)];
    }
}
@end

自定义cell
#import "CombProductCell.h"
#import "UIColor+DecColor.h"
#define DEVICE_WIDTH [UIScreen mainScreen].bounds.size.width
#define DEVICE_HEIGHT [UIScreen mainScreen].bounds.size.height

static const CGFloat ImgLength = 32.0f;

@interface CombProductCell()
@property (nonatomic,strong) UIImageView *imgView;
@property (nonatomic,strong) UILabel *lbl;
@end

@implementation CombProductCell
-(instancetype) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    if(self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])
    {
        _imgView = [[UIImageView alloc]init];
        _lbl = [[UILabel alloc]init];
        _lbl.textColor = [UIColor decColorWithRed:46 green:464 blue:46 alpha:1];
        _lbl.font = [UIFont fontWithName:@"PingFangSC-Regular" size:16.0f];
        _lbl.textAlignment = NSTextAlignmentLeft;
        [self addSubview:_imgView];
        [self addSubview:_lbl];
        //[self setFrame:CGRectMake(0, 0, DEVICE_WIDTH, 44)];
    }
    return self;
}

- (void) layoutSubviews
{
    [_imgView setFrame:CGRectMake(15, 6, ImgLength, ImgLength)];
    [_lbl setFrame:CGRectMake(55,13,DEVICE_WIDTH-55-19.5,16)];
}

主控制器
-(void) createRecommendComView
{
    /*
        商品组合View组合直接放在ViewController中,位置就在NavigationBar下面,但是在mainScrollView中流出了空白位置
     */

    //_recommendComView = [[RecommendComView alloc]initWithFrame:CGRectMake(0, NAVIBAR_HEIGHT, DEVICE_WIDTH, TOPBAR_HEIGHT)];
    _recommendComView = [[RecommendComView alloc] initWithFrame:CGRectMake(0, NAVIBAR_HEIGHT, DEVICE_WIDTH, TOPBAR_HEIGHT+CELL_HEIGHT*3) style:UITableViewStylePlain];
    [self setCombsProductData];
    //设置组合_recommendComView页面的tableview的代理
    _recommendComView.delegate = self;
    _recommendComView.dataSource= self;
    [_recommendComView reloadData];

    //添加点击事件
    [_recommendComView.unfoldBtn addTarget:self action:@selector(clickedUnFoldCombProductViewBtn) forControlEvents:UIControlEventTouchUpInside];
    _foldFlag = TRUE;
    [self.view addSubview:_recommendComView];

    [_recommendComView registerClass:[CombProductCell class] forCellReuseIdentifier:KEY_RECOMMEND_CELL_TABLEVIEW_IDENTIFIER];

}
    #pragma mark:tableView代理和DataSource

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CombProductCell *cell = [tableView dequeueReusableCellWithIdentifier:KEY_RECOMMEND_CELL_TABLEVIEW_IDENTIFIER];
    if(cell==nil)
    {
        cell = [[CombProductCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:KEY_RECOMMEND_CELL_TABLEVIEW_IDENTIFIER];
    }
    cell.product = _combProuctsArr[indexPath.row];
    return cell;
}

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return CELL_HEIGHT;
}
-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _combProuctsArr.count;
    //return 3;
}

解决方案1:

重写了layoutsubviews 的时候没调用父类的layoutsubviews吧 [super layoutsubviews]

解决方案2:

发现,在自定义tableview的时候,重写了layoutsubviews,所以导致dataSource方法没有被执行,注释掉layoutsubviews的方法,就可以执行了,但是不知道为什么?解决方法除了注

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 自定义UITableViewdataSource的cellForRowAtIndexPath方法没被执行

相关文章

  • 2017-06-05 iphone5手机,微信中无法打开优酷链接?
  • 2017-06-05 项目中封装了一个弹出框但是点击上面的按钮就崩溃,尽在iOS90以下版本出现
  • 2017-06-05 请大神指点迷津数据可以赋值到控件上,但是一滑动tableView就工程就崩溃了
  • 2017-06-05 cocoapods无法更新
  • 2017-06-05 iOS静态库问题
  • 2017-06-05 iOSUITest问题,OC下XCTAssertEqual错误
  • 2017-06-05 ipad2ios6到底該不該兼容iOS6?
  • 2017-06-05 OC编程碰到一个奇葩的问题,百思不得其解,求指点
  • 2017-06-05 ios被植入病毒iOS打包问题,求大神指教,被这问题卡住了!
  • 2017-06-05 scrollview上加tableview,手势冲突不自然

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • (swift)Thrift客户端出现“Couldnotread/write”问题
    • iOS基础控件IOS的UITableView问题
    • 用纯Swift程序真机调试,出现libswiftCoredylib异常,在模拟器可以跑
    • 手机qq浏览器如何去掉浏览器底部的菜单栏?
    • 自定义View添加了协议,结果设置代理时出错了,根本不知道什么错好吗
    • 适配iPhone6和plus应该把原来的内容同比放大还是只有宽度放大,高度和字号等等不变?
    • 用WXWebComponent代码创建一个新的web组件,出现以下问题
    • 关于七牛视频实时转码的问题
    • iOS基础控件iOS,合并工程
    • 开发手机BLE(低功耗蓝牙)App,有什么跨平台开发工具吗?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有