我有一个包含多个部分的tableview。
我想让其中一些可以选择,而其他则不可选。此外,可选择的单元格应链接到不同的ViewControllers。
有人知道怎么做吗?
答案 0 :(得分:1)
我发现管理每个单元格信息的最好方法是创建一个cell-info类,并让它代表数据。在这个类中,您可以标记单元格是可选择的,类型,处理程序等。
然后,在将单元格出列后,根据单元格信息支持对象准备显示。
示例:
@interface MyCellInfo
@property (nonatomic, copy) NSString* title;
@property (nonatomic, copy) NSString* detail;
@property (nonatomic, strong) UIImage* image;
@property (nonatomic, getter=isSelectable) BOOL selectable;
@property (nonatomic) SEL handlingSelector;
...
@end
@implementation MyCellInfo @end
这定义了一个示例cell-info类,它包含每个单元格的一些属性。
为了便于使用,我们将在表中注册一个单元格类,以获取viewDidLoad
中的示例标识符:
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier: @"ExampleIdentifier"];
您的表格视图数据源:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return dataSource.count;
}
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
return [dataSource[section] count];
}
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"ExampleIdentifier"];
MyCellInfo* cellInfo = dataSource[indexPath.section];
if(cellInfo.image == nil)
{
//Show image
}
else
{
[cell.textLabel setText:cellInfo.title];
[cell.detailTextLabel setText:cellInfo.detail];
}
return cell;
}
您的表格视图委托:
- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
MyCellInfo* cellInfo = dataSource[indexPath.section];
return cellInfo.height;
}
- (BOOL)tableView:(UITableView*)tableView shouldHighlightRowAtIndexPath:(NSIndexPath*)indexPath
{
MyCellInfo* cellInfo = dataSource[indexPath.section];
return cellInfo.selectable;
}
- (NSIndexPath*)tableView:(UITableView*)tableView willSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
MyCellInfo* cellInfo = dataSource[indexPath.section];
return cellInfo.selectable ? indexPath : nil;
}
- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
MyCellInfo* cellInfo = dataSource[indexPath.section];
[self performSelector:cellInfo.handlingSelector withObject:cellInfo];
}
剩下的就是创建数据并用MyCellInfo
对象表示每个条目。我使用了数组db类型的数组,其中顶级数组表示节,而每个内部数组是节的单元格,每个单元都是MyCellInfo
对象。
答案 1 :(得分:0)
Apple Developer网站有一个名为“仔细查看UITableViewCell”的页面
您应该关注的部分是:
答案 2 :(得分:0)
在我的另一个问题中,有人给出了一个也适用于此的答案。
在cellForRowAtIndexpath
中,你可以设置if语句来单独访问每个部分中的每个单元格:
if (indexPath.section == 0) {
if (indexPath.row == 0) {
//do any cell setup
}
if (indexPath.row == 1) {
//do any cell setup
}
}
if (indexPath.section == 1) {
if (indexPath.row == 0) {
//do any cell setup
}
if (indexPath.row == 1) {
//do any cell setup
}
}
等等。这允许你用任何东西填充cel,但也可以为每个单独的单元格进行所有设置。
同样适用于(例如)heightForRowAtIndexPath
:您只需按上述方式插入if语句,并且可以设置任何单个单元格的高度。
通常情况下,如果你需要为一堆单元格设置相同的东西,你可以使用数组,并用它填充tableview,但如果你真的需要特定单元格的特定设置,这是最简单的和最好的方式(在我看来)
希望这能帮到你们所有人!