UITableView部分命令不起作用

时间:2015-02-05 11:40:55

标签: objective-c xcode uitableview ios7

我正在使用带有自定义章节标题的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;
}

3 个答案:

答案 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。
  • 为每个部分插入一个NSMutableDictionary。
  • 在字典中为节标题插入“标题”(字符串)元素。
  • 使用键“rows”在字典中插入NSMutableArray。
  • 对于每一行,创建一个NSMutableDictionary以包含该表行的实际数据(当然,将其插入“rows”数组中)。

当然,您可以根据需要将其他元素添加到每个部分的字典中,如果您是那些在效率方面得到结论的人之一,则可以使用专用对象替换字典。

对于单节表,放弃sections数组和每节字典。