我已经使用MagicalRecord(核心数据包装器)的查询结果填充了NSArray
。我需要获取这些结果并将其显示在UITableView
内cellForRowAtIndexPath:
内的自定义单元格中,但该索引会引用已选择的另一个UITableView
。
我有两个UITableView
个;一个包含客户列表,另一个包含每个客户的约会列表。当用户选择客户时,代码将查找该客户的所有约会。因此,第二个表视图没有涉及索引。
第一个表视图有一个客户列表;当用户选择其中一个客户端时,第二个表视图将填充该所选客户端的约会列表。因此index.row
引用第一个UITableView
,第二个没有它可以引用的索引。我只是将apptDataArrray
的内容转储到单元格中。
这是我的代码:
if(tableView.tag == 2) { // appointment info
static NSString *cellIdentifier = @"apptListCell";
ApptCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell == nil) {
cell = [[ApptCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
// configure the cell...
AppointmentInfo *currentAppointment = [apptDataArray objectAtIndex: 0]; // go through the array <---- TODO
// Set the dateFormatter format
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSDateFormatter *timeFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; // start date/time
[timeFormatter setDateFormat:@"HH:mm:ss"]; // end time
UILabel *label = (UILabel *)[cell viewWithTag:3]; // display start date/time (NEEDS TO BE LOCALIZED!)<----- TODO????
label.text = [dateFormatter stringFromDate:currentAppointment.aStartTime];
label = (UILabel *)[cell viewWithTag:4]; // display end time
label.text = [timeFormatter stringFromDate:currentAppointment.aEndTime];
label = (UILabel *)[cell viewWithTag:5]; // display service tech name
label.text = currentAppointment.aServiceTech;
return cell;
}
我的问题是:当在// configure the cell
下面的行时,如何在每次调用apptDataArray
时迭代cellForRowAtIndexPath:
,因为没有可以应用于此的索引阵列
答案 0 :(得分:1)
听起来你需要为每个客户端创建一个约会数组,然后假设该数组被称为apptDataArray,下面的代码将起作用。单击第一个tableview上的行将使用客户端创建约会数组列表,并使用该数据重新加载第二个tableview。每次预约都是一排。
如果您获取所有数据并且所有结果都存储在apptDataArray中,那么您应该能够将tableviewNumberOfRows值设置为apptDataArray的大小
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if(tableView == table2Ivar){
return [apptDataArray count];
}
//Else you are getting a list of unique clients
}
然后在配置单元格时使用结果条目和表行之间的相关性,只需使用每个indexpath.row将是客户约会的条目。
AppointmentInfo *currentAppointment = [apptDataArray objectAtIndex: indexPath.row];
示例GitHub项目 https://github.com/propstm/twoTableTest
答案 1 :(得分:1)
来自
cellForRowAtIndexPath:
,但索引是指已被选中的另一个UITableView
。
什么?不,它没有。你有一个严重的误解。该方法的全名是tableView:cellForRowAtIndexPath:
。任何需要显示单元格的表视图都将自身作为第一个参数传递,并且它将自己的单个单元格*的索引路径作为第二个参数传递。当第二个表视图向您的数据源询问其单元信息时 - 当您的测试tableView.tag == 2
测试为真时 - 传入的索引路径引用该表。怎么可能不这样呢?
您需要做的就是
AppointmentInfo *currentAppointment = [apptDataArray objectAtIndex: indexPath.row];
与任何其他支持数组的表视图相同。
这里没有什么神奇之处。您已经为表视图提供了指向对象的指针,并告诉表从该对象获取所需的信息。然后,该表将消息发送到数据源对象,就像其他任何内容一样。其中一条消息是tableView:cellForRowAtIndexPath:
。另一个表视图也发送该消息的事实有时不会影响第一个。每个表格视图都会代表您自己与 数据源进行交互。
注意,这个问题 - 甚至是应用程序结构的描述 - 表明强烈你应该为每个表视图都有一个单独的数据源/委托对象。
*在评论的某处,您似乎暗示您认为在tableView:cellForRowAtIndexPath:
的一次调用期间需要在表格视图中设置所有单元格,而这也不正确。您需要配置并返回与索引路径对应的一个单元。