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;
-部分中的行数(我找不到为 RestTime 和 ExerciseTime 设置行数的方法)
- (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中的搜索栏内按下时,UISearchController会触及安全区域