如何将数组传递给我的自定义单元类

Posted

技术标签:

【中文标题】如何将数组传递给我的自定义单元类【英文标题】:How to pass an array to my custom cell class 【发布时间】:2010-12-08 18:05:47 【问题描述】:

我有一个 TableView 和我的自定义单元格类,我有一个pickerview。

我想传递一个数组来用数据填充pickerview。如何通过它。我的方法正确吗?

【问题讨论】:

【参考方案1】:

您不会向 TableViewCell 传递任何内容。相反,您必须实施

UITableViewDelegate UITableViewDatasource

填充tableView。和

UIPickerViewDelegate UIPickerViewDatasource

为采摘者。

【讨论】:

顺便说一句:如果涉及到滚动,单元格内的选择器可能工作得非常糟糕 我应该将 Picker Delegate 和数据源放在 Table View Cell 类中,考虑到我在每个单元格中都有 pickerviews 或者有办法在 tableview 类中做到这一点。如果 tableview 类中的 pickerview 委托,我将如何用它的单独数据填充 pickerview? 不,他们当然不属于牢房。见TableView Programming Guide 并熟悉delegation。它是 Cocoa 中的一个重要概念(-touch)【参考方案2】:

我在表格单元格中包含了pickerview委托和数据源,它工作正常...... 传递数组与任何视图相同。

//////////////ScrollCell.h

@interface ScrollCell : UITableViewCell <UIPickerViewDataSource, UIPickerViewDelegate>
    UILabel *textlabel;
    UIPickerView *pickerview;

    NSString *textfieldValue;
    NSString *scrollerValue;
    NSArray *scrollerData;

@property (nonatomic,retain)UILabel *textlabel;
@property (nonatomic,retain)UIPickerView *pickerview;
@property (nonatomic,retain)NSArray *scrollerData;

@property (nonatomic,retain)NSString *textfieldValue;
@property (nonatomic,retain)NSString *scrollerValue;


-(NSString *)getTextfiledValue;
-(NSString *)getScrollerValue;
-(void)setScrollerData:(NSArray *)array;
@end


/////////ScrollerCell.m

//
//  ScrollCell.m
//  MultipleDetailViews
//
//  Created by Ruslan Karimov on 12/5/10.
//  Copyright 2010 Eventagrate. All rights reserved.
//

#import "ScrollCell.h"
#import "Answers.h"

@implementation ScrollCell
@synthesize textlabel, pickerview, scrollerData, textfieldValue, scrollerValue;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 



    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) 
        textlabel = [[UILabel alloc]init];
        textlabel.textAlignment = UITextAlignmentLeft;
        textlabel.font = [UIFont systemFontOfSize:25];
        textlabel.textColor =[UIColor blackColor];
        [self.contentView addSubview:textlabel];

        pickerview = [[UIPickerView alloc]init];
        [self.contentView addSubview:pickerview];

        scrollerData = [[NSArray alloc] init];

    
    return self;



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

    [super setSelected:selected animated:animated];

    CGRect contentRect = self.contentView.bounds;
    CGFloat boundsX = contentRect.origin.x;
    CGRect frame;


    frame= CGRectMake(boundsX+10 ,+10, 300, 25);
    textlabel.frame = frame;

    //frame= CGRectMake(boundsX+200 ,0, 300, 100);
    self.pickerview.frame = CGRectMake(boundsX+200 ,0, 300, 163);

    self.pickerview.delegate = self;
    //self.pickerview.



-(void)setScrollerData:(NSArray *)array

    //[self.scrollerData arrayByAddingObjectsFromArray:array];
    scrollerData = array;
    NSLog(@"from scrolltable cell: %i",[self.scrollerData count]);


-(NSString *)getTextfiledValue

    return self.textfieldValue;

-(NSString *)getScrollerValue

    return self.scrollerValue;


//PICKER VIEW CONTROL

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView 
    return 1;

- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component 
    return [scrollerData count];


- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
   
    Answers *template = (Answers *)[self.scrollerData objectAtIndex:row];
    return template.answer_title;
    //return @"fff";


- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 





- (void)dealloc 
    [super dealloc];



@end

【讨论】:

请编辑您的原始问题,而不是发布问题作为答案。 这段代码违反了 MVC,因为视图中塞满了属于控制器的逻辑。它也正在泄漏,因为它没有释放任何成员。

以上是关于如何将数组传递给我的自定义单元类的主要内容,如果未能解决你的问题,请参考以下文章

如何在表格视图中加载不同的自定义单元格

将动态属性传递给延迟的自定义操作 WIX

从 Swift 中的自定义数据单元开始

将当前字段的值传递给 Laravel 中的自定义验证函数

如何在 TableView 中添加不同的自定义单元格 [重复]

ag-Grid 单元格渲染 - 自定义道具