我有一个包含5个不同单元格的tableviewcell。每个视图都有一个标签,其中包含以下内容之一。 1个文本字段,1个文本,视图1,开关或1个滑块。我试图在索引路径找到行的tableviewcell,以便我可以检索用户输入的信息。下面是我对单元和不同开关的代码。我只需要知道如何实现这一目标。谢谢(p.s)我正在考虑只标记元素而不是查找行的单元格,这就是为什么你会看到标记代码。
-(UITableViewCell *)listCell:(UITableView *)tableView IndexPath:(NSIndexPath*)indexPath
{
static NSString *textFieldIdentifier = @"textFieldCell";
static NSString *textViewIdentifier = @"textViewCell";
static NSString *switchIdentifier = @"switchCell";
static NSString *seekBarIdentifier = @"seekBarCell";
static NSString *datePickerIdentifier = @"datePickerCell";
//DBSectionDetailsTableViewCell *cell = (DBSectionDetailsTableViewCell *) [tableView dequeueReusableCellWithIdentifier:textViewIdentifier];
UITableViewCell *cell6 = [tableView dequeueReusableCellWithIdentifier:datePickerIdentifier];
results = [listArray objectAtIndex:[indexPath row]];
if([indexPath row] < listArray.count)
{
if (([[results objectAtIndex:2]isEqualToString:@"EditText"]))
{
DBSectionDetailsTableViewCell *cell2 = [tableView dequeueReusableCellWithIdentifier:textFieldIdentifier forIndexPath:indexPath];
cell2.titleLabel.text = [results objectAtIndex:1];
//title button
cell2.textField.tag = [indexPath row];
cell2.textField.delegate = self;
[cell2.textField addTarget:self action:@selector(textFieldDidEndEditing:) forControlEvents:UIControlEventTouchUpInside];
return cell2;
}
else if (([[results objectAtIndex:2]isEqualToString:@"EditTextLarge"]))
{
TextViewTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:textViewIdentifier forIndexPath:indexPath];
// cell = textFieldCell;
cell.titleLabel.text = [results objectAtIndex:1];
cell.textView.tag = [indexPath row];
cell.textView.delegate = self;
// [cell.textView addTarget:self action:@selector(textViewDidEndEditing:) forControlEvents:UIControlEventTouchUpInside];
return cell;
}
else if (([[results objectAtIndex:2]isEqualToString:@"Switch"]))
{
SwitchTableViewCell *cell3 = [tableView dequeueReusableCellWithIdentifier:switchIdentifier forIndexPath:indexPath];
// cell3 = switchCell;
cell3.titleLabel.text = [results objectAtIndex:1];
cell3.switchOutlet.tag = [indexPath row];
return cell3;
}
else if (([[results objectAtIndex:2]isEqualToString:@"SeekBar"]))
{
SeekBarTableViewCell *cell4 = [tableView dequeueReusableCellWithIdentifier:seekBarIdentifier forIndexPath:indexPath];
//cell4 = seekBarCell;
cell4.titleLabel.text = [results objectAtIndex:1];
cell4.slider.tag = [indexPath row];
return cell4;
}
else if (([[results objectAtIndex:2]isEqualToString:@"DatePicker"]))
{
DatePickerTableViewCell *cell5 = [tableView dequeueReusableCellWithIdentifier:datePickerIdentifier forIndexPath:indexPath];
//cell5 = datePickerCell;
cell5.titleLabel.text = [results objectAtIndex:1];
cell5.datePicker.tag = [indexPath row];
cell5.datePicker.delegate = self;
[cell5.datePicker addTarget:self action:@selector(datePickerDidEndEditing:) forControlEvents:UIControlEventTouchUpInside];
return cell5;
}
}
//UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
return cell6;
}
答案 0 :(得分:1)
您可以使用[tableView cellForRowAtIndexPath:indexPath]
从表中获取可见单元格。屏幕外的单元格将从UITableView
中删除,您将无法访问它们,因为它们将被放回可重用的单元格队列中。
注1 :您不应该依赖UITableView
来存储当前的数据状态。它会丢弃在屏幕外滚动的单元格,因此如果您不将数据保存在其他位置,它将永远丢失。
注意2 :此代码不是特别安全:
results = [listArray objectAtIndex:[indexPath row]];
if([indexPath row] < listArray.count) // This is always true.
// If it isn't true, the above
// objectAtIndex: will crash your app.
答案 1 :(得分:0)
您应该在用户为每个单元格输入信息时保存信息,因为一旦它离开视图就无法到达单元格,以便稍后重复使用。