可以动态地拥有 numberOfSectionsInTableView 吗?

Posted

技术标签:

【中文标题】可以动态地拥有 numberOfSectionsInTableView 吗?【英文标题】:It is possible to have numberOfSectionsInTableView dynamically? 【发布时间】:2011-11-10 16:16:50 【问题描述】:

我可以动态获得行数吗? 我正在尝试删除 tableView 部分标题,但我不知道如何......我已经教过一个解决方案是更改部分的数量。

现在我的 numberOfSectionsInTableView 看起来像:

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
        return 2;

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

    beTribesAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;

    switch (section) 
        case 0:
            return [appDelegate.firstArray count];
        case 1:
            return [appDelegate.secondArray count];    
        default:
            return 0;
    

像这样设置标题部分:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
 
    sectionTitles = [[NSMutableArray alloc] init];

        [sectionTitles addObject:@"firstSection"];
        [sectionTitles addObject:@"secondSection"];
    NSString *sectionText = [sectionTitles objectAtIndex:section];
    return sectionText;

【问题讨论】:

【参考方案1】:

我不确定是否理解这个问题,因为答案似乎微不足道:只需更改实现以返回一些动态值就可以了,对吧?

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    return self.nbSections;

其中nbSections 是一个属性,您将为其分配所需的值,以便您可以随时更改它。那到底是怎么回事?

PS:当然,请致电[tableView reloadData] 重新计算您的 tableView 的内容并明显考虑新值...也许这就是您所缺少的?

【讨论】:

还有一个……我不知道该放在哪里[tableView reloadData] 在您更改 nbSections 的值之后。阅读 Apple 文档中的“表格视图编程指南”,它通过示例代码和关于表格视图、部分、单元格等的通用原则进行了解释 那我应该把它放在numberOfSectionsInTableView方法里面? 没有。调用realoadData 会触发对该方法的调用的东西。当您计划在代码中编写nbSections = ... 时放置它。真的,去阅读文档。 好吧,我虽然设置到位,像这样:AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; if (appDelegate.firstArray.count == 0) numberOfSections = 1; else numberOfSections = 2; 【参考方案2】:

要删除部分标题,您必须像这样将标题高度设置为 0

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
    switch (section) 
        case 0:
            return 0;
        default:
            return 44;
    

此示例将删除第一个部分标题,所有其他部分将设置为 44。

【讨论】:

【参考方案3】:

首先要做的是将 sectionTitles 数组移动到视图控制器上的一个属性中,并在您的 init 方法中对其进行初始化。

然后当你想改变一个节的标题时,改变数组中的值并调用[tableView reloadData]

你想从 tableView 中删除整个部分还是只删除标题?如果您只想删除标头,请将数组中的项目设置为 @""

如果您想完全删除该部分,请从 sectionTitles 中删除该项目并将您的 numberOfSectionsInTableView 方法更改为:

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
        return [sectionTitles count];

【讨论】:

以上是关于可以动态地拥有 numberOfSectionsInTableView 吗?的主要内容,如果未能解决你的问题,请参考以下文章

设计模式学习_装饰者模式

python上传模块,别人搜索不到

集 PythonCRRuby 之所长,动态编程语言 Julia 1.0 正式发布

我可以在ncyBreadcrumb中拥有动态父级吗?

Tailwind/Vue 动态地将弹性项目对齐到与邻居相同的高度

python源码剖析