gpt4 book ai didi

iPhone - 使用自定义单元格扩展 UITableView 并在选择时隐藏/显示标签

转载 作者:行者123 更新时间:2023-12-03 19:36:47 26 4
gpt4 key购买 nike

  • 我在 UIView 中有一个 UITableView
  • 表格 View 的单元格是自定义的,因此由 UITableViewCell 类管理

我需要在选择时展开/收缩单元格,这是我使用很棒的教程 here 完成的。 。但是,我还需要在选择时显示/隐藏 UILabels - 就像详细 View 一样,当您展开单元格时,会显示更多标签;将其收缩回原来的大小,并且这些标签再次被隐藏。

基本上:
点击
延长细胞长度
显示标签

再次点击
合约单元
隐藏标签

一次仅打开 1 个单元格

这一切听起来很简单,但是网络上普遍使用的方法(我上面链接到的教程)会在第一次触摸时自动取消选择其单元格,这意味着我隐藏的 UILabel 永远没有机会显示。

如果我删除

[tableView deselectRowAtIndexPath:indexPath animated:TRUE];

从 didSelectRowAtIndexPath 中,我可以显示隐藏标签,但它当然不会消失,因为在我选择不同的单元格之前,该单元格不会被取消选择。

如何才能使单元格在用户第二次单击后返回到常规高度后自动取消选择?另外,有没有一种方法可以将表格一次限制为只能展开一个单元格,因为现在您可以完全展开所有单元格。我希望展开 Cell2 能自动将 Cell1 缩小回原来的高度。

谢谢大家;有时不知道如果没有 Stack Overflow 我会做什么。

TableViewController.h

@interface TableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
IBOutlet UITableView *tableView;
NSMutableDictionary *selectedIndexes;
}
@end

TableViewController.m中的相关代码

@interface TableViewController (private)

- (BOOL)cellIsSelected:(NSIndexPath *)indexPath;

@end

@implementation TableViewController

#define kCellHeight 50.0

- (void)viewDidLoad {
[super viewDidLoad];

selectedIndexes = [[NSMutableDictionary alloc] init];
}


- (BOOL)cellIsSelected:(NSIndexPath *)indexPath {
// Return whether the cell at the specified index path is selected or not
NSNumber *selectedIndex = [selectedIndexes objectForKey:indexPath];
return selectedIndex == nil ? FALSE : [selectedIndex boolValue];
}


- (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] autorelease];

}

return cell;
}

#pragma mark -
#pragma mark Tableview Delegate Methods

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// Deselect cell
[tableView deselectRowAtIndexPath:indexPath animated:TRUE];

// Toggle 'selected' state
BOOL isSelected = ![self cellIsSelected:indexPath];

// Store cell 'selected' state keyed on indexPath
NSNumber *selectedIndex = [NSNumber numberWithBool:isSelected];
[selectedIndexes setObject:selectedIndex forKey:indexPath];

// This is where magic happens...
[tableView beginUpdates];
[tableView endUpdates];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
// If our cell is selected, return double height
if([self cellIsSelected:indexPath]) {
return kCellHeight * 2.0;
}

// Cell isn't selected so return single height
return kCellHeight;
}

@end

此外,UITableCell 类中的 UILabels:

    - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
if (selected == YES){
date.hidden = NO;
}
else if (selected == NO) {
date.hidden = YES;
}
}

最佳答案

我是个白痴。最简单的解决方案总是最好的,这就是一行代码:

 self.contentView.clipsToBounds = YES;

当您设置单元并对其进行布局时。

呃。

关于iPhone - 使用自定义单元格扩展 UITableView 并在选择时隐藏/显示标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6464255/

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