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

Posted

技术标签:

【中文标题】如何使用 iOS 故事板创建具有两个嵌套 tableview 单元格 xib 的单个 tableview?【英文标题】:how to create single tableview with two nested tableview cell xibs using iOS storyboard? 【发布时间】:2015-12-10 05:12:02 【问题描述】:

我正在尝试使用父子自定义表格视图单元格实现手风琴表格视图。我正在使用下面提到的开源代码。

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

在该代码中具有单个 tableview 和单个 tableview 单元格。它将显示父单元格和子单元格,但我想制作:

    主故事板 Tableview Parenttableviewcell 分离类和xib Childtableviewcell 分离类和xib

它应该适用于带有手风琴的主控制器表视图。现在在此代码中没有单独的自定义单元格(父和子使用相同的 tableview 单元并仅更改数据)。

【问题讨论】:

你能不能给一张图片或其他东西来解释你想要达到的目标?,没有嵌套的tableview单元格,也许你想要在每个单元格中添加另一个tableviewcontroller? 我会补充的。给我两分钟!@Tj3n 请看上面我想现在你可以理解@Tj3n 试试这个SO Question,它有很多很好的答案,不过你应该遵循第二个答案,即使苹果公司也得到了this tutorial 来了解如何实现这一目标 所有东西都不是 Xib 的。它对我来说很复杂。任何简单的方法来做到这一点! 【参考方案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;

【讨论】:

好友非常感谢您的帮助顺便说一句我是新手。请提供一些代码。这对我很有帮助。我为这个问题挣扎了 3 天。@Rahul Mathur 等待 10 分钟,让我用代码编辑答案。 @Apple_Ajay 抱歉耽搁了,请检查更新后的代码 :) 兄弟它令人困惑。我需要合并两个单独的 tablview 单元格并扩展手风琴类型@Rahul @Apple_Ajay 首先,您不需要两个单独的 XIB 来执行您的要求。与故事板一起去。不要担心单元格合并,因为您需要管理的是该特定部分的行数。你只需要玩那个方法,没有别的。【参考方案2】:

您可以使用 SKSTableview 来实现它。

请参考以下链接:

    SKSTableView

【讨论】:

您好,请问可以发到邮箱吗?【参考方案3】:

让我们制作两种自定义单元格。

+父单元格为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

【讨论】:

请提供一些代码。我是这个@sticker 的新手 非常感谢。顺便说一句,部分可以添加标签和按钮吗? 您制作了一个自定义 UITableViewHeaderFooterView,您可以添加任何您想要的内容,例如另一个 UIView

以上是关于如何使用 iOS 故事板创建具有两个嵌套 tableview 单元格 xib 的单个 tableview?的主要内容,如果未能解决你的问题,请参考以下文章

故事板ios中具有不同页面视图的PageViewController

使用两个继承类创建故事板屏幕

iOS:使用选项卡视图控制器更改故事板不会反映在模拟器上

如何使用故事板启动应用程序

IOS开发。如何通过 segue 连接不同故事板中的两个场景

如何创建一个 UIViewController 具有两个视图,根据单击的按钮显示一个或另一个