我正在使用带有自定义章节标题的tableView。一切都按预期工作,但部分的顺序没有像我预期的那样响应。这是我正在使用的字典数据。按照我想要的顺序,我希望“即将”作为第1部分,“参加”作为第2部分,但它显示的顺序与此完全相反。
tableSection = @{@"Upcoming" : @[@"Amit", @"Vatsala", @"Jasmine", @"Jasmine", @"Jasmine"],
@"Attended" : @[@"Kritarth", @"Rahul"] };
请建议一些帮助!!
#pragma mark - UITableView delegate
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [tableSection count];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 150;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection: (NSInteger)section {
return 25;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
return [tableSectionTitles objectAtIndex:section];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
// Return the number of rows in the section.
NSString *sectionTitle = [tableSectionTitles objectAtIndex:section];
NSArray *sectionAnimals = [tableSection objectForKey:sectionTitle];
return [sectionAnimals count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *simpleTableIdentifier = @"SimpleTableCell";
AppointmentTableCell *cell = (AppointmentTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"AppointmentTableCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
//Configure the cell...
NSString *sectionTitle = [tableSectionTitles objectAtIndex:indexPath.section];
NSArray *sectionArray = [tableSection objectForKey:sectionTitle];
cell.nameLabel.text = [sectionArray objectAtIndex:indexPath.row];
cell.doctorImageView.image = [UIImage imageNamed:@"doctor.png"];
[cell.nameLabel setFont:FONT_OPENSANS_LIGHT(14)];
return cell;
}
答案 0 :(得分:0)
为什么不单独为Table View
的标题添加数组?
_arrayTitles = @[@"Upcoming",@"Attended"];
一个包含Sections data source
的两个数组的数组:
NSArray *arraySectionOne=@[@"Amit", @"Vatsala", @"Jasmine", @"Jasmine", @"Jasmine"];
NSArray *arraySectionTwo=@[@"Kritarth", @"Rahul"];
_dataSource=@[arraySectionOne, arraySectionTwo];
在' viewForHeaderInSection
'你从这个数组中设置标题:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
YourHeaderView *headerView=nil;
headerView=[tableView dequeueReusableHeaderFooterViewWithIdentifier:@"YourHeaderView"];
headerView.titleHeader.text = _arrayTitles[section];
return headerView;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return _arrayTitles.count;
}
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{
NSMutableArray *arraySection=_dataSource[section];
return arraySection.count;
}
答案 1 :(得分:0)
我看到你实际上从一个名为tableSectionTitles的单独数组中获取标题,并且因为你使用该数组中的字符串来获取所有行信息,它将解释为什么顺序不同。我没有在你提供的代码中看到tableSectionTiltles数组,但我最好的猜测就是问题实际来自哪里。
修改强>
正如你在评论中所说,tableSectionTitles实际上是一个来自[tableSection allKeys]的数组;因为NSDictionary实际上没有一个oder,所以数组以它想要的顺序出现。您可以通过两种方式解决此问题。
手动将字典中的字典键放在您想要的oder中,但这样可以缩放。
使用titleString和rowStringsArray创建一个NSObject子类(将此名称更好地命名为构建应用程序的内容),然后将这些对象添加到数组中并使用它来生成表。
我希望有所帮助。
答案 2 :(得分:0)
构建完全通用的dataSource的方法是:
sections
NSMutableArray。当然,您可以根据需要将其他元素添加到每个部分的字典中,如果您是那些在效率方面得到结论的人之一,则可以使用专用对象替换字典。
对于单节表,放弃sections
数组和每节字典。