如何使用iOS故事板创建具有两个嵌套tableview单元格xib的单个tableview?

时间:2015-12-10 05:12:03

标签: ios objective-c uitableview

我正在尝试使用父级和子级自定义tableview单元格实现accordion tableview。我使用下面提到的开源代码。

源代码:https://github.com/singhson/Expandable-Collapsable-TableView

在具有单个tableview单元的单个tableview的代码中。它将显示父母和子女的细胞,但我想做:

  1. 主要故事板Tableview
  2. Parenttableviewcell单独的类和xib
  3. Childtableviewcell单独的类和xib
  4. 它应该适用于主控制器tableview和accordion。现在,在此代码中没有单独的自定义单元格(父级和子级使用相同的tableview单元格,仅更改数据)。

    enter image description here

3 个答案:

答案 0 :(得分:1)

您可以通过尝试管理表视图的节和行来实现它,这就是我认为是在不使用任何第三方代码的情况下实现它的最简单方法。例如

  • 所有节标题都包含自己的行数。
  • 获取将在部分中存储扩展行状态的数组或字典或数组。 (对于展开状态说'1',对于折叠状态说'0;对于折叠状态'
  • 如果处于初始状态,则展开所有UI,然后在数组或字典中设置所有对象“1”。
  • 点击单个标题(我假设部分将在点击部分的单个标题时折叠),您可以获得需要折叠的部分。对于数组或字典中的折叠部分行,将此状态保留为“0”。
  • 重新加载表并检查数组或字典中'0'实体的heightForRow委托方法。无论你在哪里找到'0',在委托方法中将高度返回为0。
  • 执行相反的反向功能。

更新代码

- (IBAction)btnMenuViewTypeTapped:(id)sender{
UIButton *btnSender = (UIButton *)sender;

if(menuViewType == MVTCollapse){
    [btnSender setImage:[UIImage imageNamed:@"MenuCollapse"] forState:UIControlStateNormal];
    menuViewType = MVTExpand;
    for(NSInteger intAtIndex=0; intAtIndex<[mutArrSearchMenuItems count]; intAtIndex++){
        [mutArrSectionOpened replaceObjectAtIndex:intAtIndex withObject:@"1"];
    }
} else{
    [btnSender setImage:[UIImage imageNamed:@"MenuExpand"] forState:UIControlStateNormal];
    menuViewType = MVTCollapse;
    for(NSInteger intAtIndex=0; intAtIndex<[mutArrSearchMenuItems count]; intAtIndex++){
        [mutArrSectionOpened replaceObjectAtIndex:intAtIndex withObject:@"0"];
    }
}
[tblViewRestaurantMenu reloadData];

}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return [mutArrSearchMenuItems count];
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    NSInteger intNumOfRow;
    if([mutArrSectionOpened[section] isEqualToString:@"1"]){
        intNumOfRow = [mutArrSearchMenuItems[section][strMenuType] count];
    }
    else{
        intNumOfRow = 0;
    }
    return intNumOfRow;
}

答案 1 :(得分:0)

您可以使用SKSTableview实现它。

请参阅以下链接:

  1. SKSTableView

答案 2 :(得分:0)

制作两种自定义单元格。

+父细胞是tableview sectionHeader

+儿童细胞是正常细胞

/*your datasource like this
 arrData = @[section, section, section ....]

section.name
section.image
section.arrayChild


 arrayChild = @[child, child, child....]
 child.name
 child.image
*/
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return arrData.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    section = arrData[section];
    child = section.child;
    return child.count;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    //Cell is Custom of UITableViewHeaderFooterViewCell
    //load your Parent Cell here

}
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //load your custom chill cell here
}