cari

Rumah  >  Soal Jawab  >  teks badan

objektif-c - Kaedah cellForRowAtIndexPath bagi dataSource UITableView tersuai tidak dilaksanakan

Menyesuaikan paparan jadual, tetapi selepas melaksanakannya dalam pengawal utama, sel tidak dimuatkan Pada titik rehat, didapati bahawa kaedah cellForRowAtIndexPath:(NSIndexPath *)indexPath tidak dimasukkan, iaitu, ia tidak. dipanggil. Berikut ialah kod untuk menyesuaikan UITableView:
.h fail

#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;
}
黄舟黄舟2794 hari yang lalu806

membalas semua(2)saya akan balas

  • phpcn_u1582

    phpcn_u15822017-05-02 09:40:00

    Saya mendapati bahawa apabila menyesuaikan paparan jadual, reka letaksubpandangan telah ditulis semula, jadi kaedah Sumber data tidak dilaksanakan Jika saya mengulas kaedah reka letaksubpandangan, ia boleh dilaksanakan, tetapi saya tidak tahu mengapa? Adakah terdapat sebarang penyelesaian selain komen?

    balas
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-02 09:40:00

    Apabila anda menulis semula subview susun atur, anda tidak memanggil subview susun atur kelas induk [subview reka letak super]

    balas
    0
  • Batalbalas