我创建了一个这样的数据输入屏幕,其中每行包含一个文本字段
这里输入数据到文本字段后,如果我们滚动页面,所有文本字段的上升(超出视图)将返回到原始位置时设置为null,这是我的每个单元格的代码CustomCellStudentData
是一个单元格类,我为标签创建了框架
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//static NSString *CellIdentifier = @"Cell";
CustomCellStudentData *cell = (CustomCellStudentData*)[tableView dequeueReusableCellWithIdentifier:nil];
if (cell == nil) {
cell = [[[CustomCellStudentData alloc] initWithFrame:CGRectZero reuseIdentifier:nil] autorelease];
}
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
switch(indexPath.section)
{
case 0:
switch (indexPath.row)
{
case 0:
{
tfText[0] = [[UITextField alloc] initWithFrame:CGRectMake(125,22, 170, 25)];
cell.accessoryView = tfText[0];
tfText[0].delegate=self;
tfText[0].font = [UIFont systemFontOfSize:14];
tfText[0].placeholder =@"<Student Name>";
cell.primaryLabel.text =@"Student Name: ";
}
break;
case 1:
{
tfText[1] = [[UITextField alloc] initWithFrame:CGRectMake(125,22, 170, 25)];
cell.accessoryView = tfText[1];
tfText[1].delegate=self;
tfText[1].font = [UIFont systemFontOfSize:14];
tfText[1].placeholder =@"<Student Age>";
tfText[1].keyboardType = UIKeyboardTypeNumbersAndPunctuation;
cell.primaryLabel.text =@"Student Age: ";
}
break;
case 2:
{
cell.primaryLabel.text =@"Gender: ";
segmentedControl = [[UISegmentedControl alloc] initWithItems:nil];
segmentedControl.segmentedControlStyle = UISegmentedControlStylePlain;
segmentedControl.frame = CGRectMake(125,22, 170, 25);
[segmentedControl insertSegmentWithTitle:@"Male" atIndex:0 animated:YES];
[segmentedControl insertSegmentWithTitle:@"Female" atIndex:1 animated:YES];
segmentedControl.selectedSegmentIndex = 1;
[segmentedControl setMomentary:NO];
[segmentedControl addTarget:self action:@selector(segmentSwitch:) forControlEvents:UIControlEventValueChanged];
cell.accessoryView =segmentedControl;
}
break;
case 3:
{
tfText[3] = [[UITextField alloc] initWithFrame:CGRectMake(125,22, 170, 25)];
cell.accessoryView = tfText[3];
tfText[3].delegate=self;
tfText[3].font = [UIFont systemFontOfSize:14];
tfText[3].placeholder =@"<dd/mm/yyyy>";
tfText[3].keyboardType = UIKeyboardTypeNumbersAndPunctuation;
cell.primaryLabel.text =@"Date Of Birth: ";
}
}
}
如果数据变为空,我怎么解决这个问题,任何人都可以帮助我, 提前谢谢
答案 0 :(得分:2)
每次调用cellForRowAtIndexPath:
时都会创建文本字段。我认为您可以通过在其他位置创建文本字段来解决此问题,可能是viewDidLoad
或类似的方法,只需在调用cellForRowAtIndexPath:
时设置附件视图即可。例如,
tfText[0] = [[UITextField alloc] initWithFrame:CGRectMake(125,22, 170, 25)];
tfText[0].delegate=self;
tfText[0].font = [UIFont systemFontOfSize:14];
tfText[0].placeholder =@"<Student Name>";
将前四行移至viewDidLoad
并仅创建一次。让下面的线保持不变。
cell.accessoryView = tfText[0];
答案 1 :(得分:2)
因为每次制作单元格时都会重新创建文本字段。
取第一个单元格(索引0)
tfText[0] = [[UITextField alloc] initWithFrame:CGRectMake(125,22, 170, 25)];
cell.accessoryView = tfText[0];
tfText[0].delegate=self;
tfText[0].font = [UIFont systemFontOfSize:14];
tfText[0].placeholder =@"<Student Name>";
cell.primaryLabel.text =@"Student Name: ";
第一次创建表时,您将创建一个文本视图并将其添加到单元格中。然后,用户将他们的数据输入到单元格中(在这种情况下是他们的名字)。
然后,他们将桌子向下滚动并重新上升。
表视图将再次调用tableView:cellForRowAtIndexPath :.您的代码将索引0处的文本字段替换为新的空字符。
在switch语句中尝试这样的事情:
if (NULL == tfText[0]) {
tfText[0] = [[UITextField alloc] initWithFrame:CGRectMake(125,22, 170, 25)];
tfText[0].delegate=self;
tfText[0].font = [UIFont systemFontOfSize:14];
tfText[0].placeholder =@"<Student Name>";
}
cell.accessoryView = tfText[0];
cell.primaryLabel.text =@"Student Name: ";
答案 2 :(得分:1)
dequeueReusableCellWithIdentifier:nil
我相信这是问题,你可能会在那里得到其他类型的细胞。您应该为该表中使用的每种类型的单元格设置单元格标识符。
答案 3 :(得分:0)
看起来你正在处理有限数量的单元格......也许你不应该为出队而烦恼......只需像普通的控制元素一样处理它们......将它们粘在一个数组视图中加载和在cellForRowAtIndexPath中传递它们