iOS:添加阵列以创建动态单元格

时间:2014-01-24 05:56:07

标签: ios objective-c uitableview

我正在尝试创建一个填充了文本字段的表格单元格。但是,文本字段的数量永远不是固定的数量。我想我只是将阵列射入表格单元格,然后从那里完成其余的工作。

但我似乎无法弄清楚如何做到这一点......理想情况下,我可以使用- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifierUITableViewCell的必要数据访问数组。然后循环并分配必要数量的文本字段。

我向单元格添加了myArray属性,然后在上面的方法中执行了alloc init,但仍然无法从我的视图控制器访问它。例如cell.myArray = ...

我怎样才能做到这一点?我有更好的方法吗?这只是我想到的第一种方式。感谢任何帮助,谢谢你们。

编辑(粗略示例):

//MyCell.h

@interface ITDContactDetailsCell : UITableViewCell
    @property (strong, nonatomic) NSMutableArray *myArray;
@end


//MyCell.m

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
        if (self) {
            _myArray = [[NSMutableArray alloc]init];
            //Do some stuff with array (like add UITextViews)
        }
}

//MyViewController.m

- (UITableViewCell*)tableView:(UITableView *)table cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  NSString *cellIdentifier = @"ContactDetails4LineCell";
  MyCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
     //This doesn't even register
     cell.myArray = [NSMutableArray arrayWithObjects: @"a", @"b", nil];

}

2 个答案:

答案 0 :(得分:1)

你必须改变流量。因为

  • 首先调用它。- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier并且由于empty array而无效。
  • cell.myArray = [NSMutableArray arrayWithObjects:@“a”,@“b”,nil]; 这将在第一个点之后执行第二个,所以这也是 什么都没有。

<强>更新

试试这个..

在cell.h中

-(void)addTextField;

in cell.m

-(void)addTextField
{
   // Do your stuff
}
你的viewcontroller中的

- (UITableViewCell*)tableView:(UITableView *)table cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  NSString *cellIdentifier = @"ContactDetails4LineCell";
  MyCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
     //This doesn't even register
     cell.myArray = [NSMutableArray arrayWithObjects: @"a", @"b", nil];
     [cell addTextField];

}

答案 1 :(得分:1)

您可以在ITDContactDetailsCell课程上构建自己的setter。当VC说cell.myArray = ...

时,会调用以下签名
- (void)setMyArray:(NSMutableArray *)array {

    _myArray = array;  // this + what ARC does to it is what the synthesized setter does

    // here, we do something with the array so the user can interact with it
    // labels are simpler, but textFields are the same idea
    CGFloat x = 10, y = 10;
    for (NSString *string in array) {
        CGRect frame = CGRectMake(x,y,60,20);
        UILabel *label = [[UILabel alloc] initWithFrame:frame];
        label.text = string;
        [self addSubview:label];
        x += 60;
    }
}