gpt4 book ai didi

iphone - UITableViewCell 中的 UILabel 重叠

转载 作者:行者123 更新时间:2023-12-01 19:24:28 25 4
gpt4 key购买 nike

我有 2 个 UILabel,1 个标题 1 个副标题,
这意味着在选择 segmentedControl 时会发生变化。

It works but instead i get the SAME UILabel overlapping itself when a different segment is selected?

我想我需要创建一个 Action 来从 super View 中删除标签,然后再将其重新显示到单元格上?只是想知道如何去做

2 Labels overlapping themselves

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

EventUpcoming *aEventUpcoming = [euEvent objectAtIndex:indexPath.section];
EventWeekly *aEventWeekly = [ewEvent objectAtIndex:indexPath.section];

UILabel *cellTitle = [[UILabel alloc] initWithFrame:CGRectMake(15, 5, 290, 20)];
UILabel *cellSubtitle = [[UILabel alloc] initWithFrame:CGRectMake(15, 20, 290, 20)];

NSString *titleString = [[NSString alloc] init];
NSString *subtitleString = [[NSString alloc] init];

if (segmentedControl.selectedSegmentIndex == 0)
{
Event *aEvent = [aEventUpcoming.event objectAtIndex:indexPath.row];
titleString = aEvent.name;
subtitleString = aEvent.subtitle;
}
else
{
Event *aEvent = [aEventWeekly.event objectAtIndex:indexPath.row];
titleString = aEvent.name;
subtitleString = aEvent.subtitle;
}

NSString *titleStringUC = [titleString uppercaseString];
NSString *subtitleStringLC = [subtitleString lowercaseString];

cellTitle.text = titleStringUC;
cellTitle.font = [UIFont boldSystemFontOfSize:11];
cellTitle.textColor = [UIColor colorWithRed:142/255.0f green:142/255.0f blue:142/255.0f alpha:1];
cellTitle.shadowColor = [UIColor whiteColor];
cellTitle.shadowOffset = CGSizeMake(1, 1);
cellTitle.backgroundColor = [UIColor clearColor];

cellSubtitle.text = subtitleStringLC;
cellSubtitle.font = [UIFont boldSystemFontOfSize:11];
cellSubtitle.textColor = [UIColor colorWithRed:177/255.0f green:177/255.0f blue:177/255.0f alpha:1];
cellSubtitle.shadowColor = [UIColor whiteColor];
cellSubtitle.shadowOffset = CGSizeMake(1, 1);
cellSubtitle.backgroundColor = [UIColor clearColor];


tableViewCellSeparator = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"TableCellSeparator.png"]];
tableViewCellSeparator.frame = CGRectMake(0, cell.bounds.size.height - 2, 320, 2);

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

[cell.contentView addSubview:cellTitle];
[cell.contentView addSubview:cellSubtitle];
[cell.contentView addSubview:tableViewCellSeparator];






return cell;
}

更新:
两者都是非常有效的答案,tyvm

最佳答案

您没有正确重用您的单元格,因此您没有获得重用的性能优势,并使代码更加复杂。你也没有使用 Apple 提供的开箱即用的部件。

首先,您应该在 cell==nil 中创建并添加所有 subview 。堵塞。这是您创建可重复使用单元的地方。在其余的例程中,您只是重新配置单元。这要快得多。

二、UITableViewCell已经内置了两个标签。您不需要创建它们。他们被称为 textLabeldetailTextLabel .它们是正常的标签;你可以移动它们,让它们看起来像你想要的任何东西。在 cell==nil 中执行此操作堵塞。

那么您只需调用cell.textLabel.text = ...cell.detailTextLabel.text = ...cell==nil阻止,你很高兴。

如果您需要的标签多于两个,那么我将继承 UITableViewCell并在其上创建新属性,以便您可以轻松地重新配置单元格。

关于iphone - UITableViewCell 中的 UILabel 重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8565208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com