我正在尝试创建一个填充了文本字段的表格单元格。但是,文本字段的数量永远不是固定的数量。我想我只是将阵列射入表格单元格,然后从那里完成其余的工作。
但我似乎无法弄清楚如何做到这一点......理想情况下,我可以使用- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
中UITableViewCell
的必要数据访问数组。然后循环并分配必要数量的文本字段。
我向单元格添加了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];
}
答案 0 :(得分:1)
你必须改变流量。因为
- (id)initWithStyle:(UITableViewCellStyle)style
reuseIdentifier:(NSString *)reuseIdentifier
并且由于empty array
而无效。<强>更新强>
试试这个..
在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;
}
}