Objective-C:tableview中的2个不同的自定义单元格[关闭]

Posted

技术标签:

【中文标题】Objective-C:tableview中的2个不同的自定义单元格[关闭]【英文标题】:Objective-C : 2 different custom cells in tableview [closed] 【发布时间】:2016-10-26 11:29:04 【问题描述】:

我有一个UITableView,其中包含 2 个不同的自定义单元格。一种是ExerciseTime,一种是RestTime。我希望在每 2 个 ExerciseTime 单元格之间插入我的 RestTime 单元格:

这是我的代码:

-行高

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

    // RestTime
    if (indexPath.row % 2 == 1) 
        return 40.0f;
    

    // ExerciseTime
    else 
        return 65.0f;
    

-部分中的行数(我找不到为 RestTimeExerciseTime 设置行数的方法)

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

    return (self.preset.blocks.count * 2) - 1;

-行的单元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    if(indexPath.row % 2 == 1) 
        RestTimeTableViewCell *restTimeCell = (RestTimeTableViewCell *)[tableView dequeueReusableCellWithIdentifier:RestTimeTableViewCellIdentifier  forIndexPath:indexPath];
        RestTime *restTime = (RestTime *)[self.restTimeArray objectAtIndex:indexPath.row];
        //CustomCell
        return restTimeCell;
    else
        ExerciseTimeTableViewCell *exerciseTimecell = (ExerciseTimeTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ExerciseTimeTableViewCellIdentifier  forIndexPath:indexPath];
        ExerciseTime *exerciseTime = [self.exerciseTimeArray objectAtIndex:indexPath.row];
        //CustomCell
        return exerciseTimecell;
    
    return nil;

如何创建一个带有 2 个这样的自定义单元格的 tableView?

【问题讨论】:

那又怎样?你有什么问题? 除此之外,行数大概是2n-1。 @luk2302 我希望将我的 RestTime 单元格插入到每 2 个 ExerciseTime 单元格之间 在您的代码中,numberofRowsinSection 方法只需要计算运动时间。 @VMCuongOn*** 在您提到的问题中,例如“我希望将我的 RestTime 单元格插入到每 2 个 ExerciseTime 单元格之间”。在你的形象中,你做了一些不同的事情。 【参考方案1】:

首先返回计数为numberOfRowsInSection 中的两个数组,然后在cellForRowAtIndexPath 中尝试类似的操作。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

    // RestTime
    if (indexPath.row % 3 == 0) 
        return 40.0f;
    
    // ExerciseTime
    else 
        return 65.0f;
    


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    if (indexPath.row % 3 == 0) 
        RestTimeTableViewCell *restTimeCell = (RestTimeTableViewCell *)[tableView dequeueReusableCellWithIdentifier:RestTimeTableViewCellIdentifier  forIndexPath:indexPath];
        //Access you object from array like this
        NSInteger index = (NSInteger) (indexPath.row / 3);
        RestTime *restTime = (RestTime *)[self.restTimeArray objectAtIndex:index];
    
    else 
        ExerciseTimeTableViewCell *exerciseTimecell = (ExerciseTimeTableViewCell *)[tableView dequeueReusableCellWithIdentifier:ExerciseTimeTableViewCellIdentifier  forIndexPath:indexPath];
        //Access you object from array like this
        NSInteger index = (indexPath.row - (NSInteger) (indexPath.row / 3));
        ExerciseTime *exerciseTime = [self.exerciseTimeArray objectAtIndex:(index - 1)];
    
    return cell;

输出: 我尝试将RestTimeTableViewCell 的背景颜色设置为 红色绿色ExerciseTimeTableViewCell

【讨论】:

我能问你为什么使用 indexPath.row % 3 == 0 吗?因为我需要奇数 indexPath(1,3,5,7,9,...) 中的 RestTime 单元格和偶数 indexPath (0,2,4,6,8,...) 中的 ExerciseTime 单元格 @VMCuongOn*** 有问题你已经告诉过,我希望我的 RestTime 单元格在每 2 个 ExerciseTime 单元格之间插入,这就是我使用 % 3 模块化的原因。 我已经尝试实现你的代码,但我崩溃了,因为“索引 1 超出范围 [0 .. 0]” 我已编辑答案,请再次检查。 我是根据你的代码做的,非常感谢!【参考方案2】:

如果您有 n 个锻炼时间,您将能够插入 n-1 个休息时间。所以

试试这个...

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

    return self.exerciseTime.count + (self.restTime.count >= self.exerciseTime.count) ? self.exerciseTime.count-1 : self.restTime.count;

现在,在偶数位置添加锻炼时间,在奇数位置添加休息时间,直到当前索引存在于这两个列表中。如果当前索引超过restTime,则继续添加executiveTime。让我知道这是否有效。

【讨论】:

为什么是负面的?请赐教。 谢谢你,但这只解决了我的一个问题,你能帮我解决这个问题吗 @UjjalSuttraDhar 你真的不应该尝试回答这样的帖子,这些帖子甚至不首先提出问题。你只能这样输。等待 OP 的澄清或走开。 更新了答案。 @UjjalSuttraDhar 我认为我们只需要 (N * 2) -1 但谢谢

以上是关于Objective-C:tableview中的2个不同的自定义单元格[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C 链接两个 Tableview

带数组的 TableView (Objective-C)

在Objective-C中的搜索栏内按下时,UISearchController会触及安全区域

Tableview 未使用 Objective-c 显示 NewsFeed

如何删除tableView单元iOS

ios objective-c tableView searchBar