目前,我的每个UITableView
部分都包含10行。我想要的是每个部分初始化那10行,但只显示3.如果用户点击“显示更多”按钮,则会显示所有10个。我想通过在隐藏部分使用类似的东西来做到这一点:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
float heightForRow = 65;
if(cell.tag>=3)
return 0;
else
return heightForRow;
}
这意味着要隐藏除前3行之外的所有行。问题是我收到一条错误陈述use of undeclared identifier 'cell'
。我在cell
中初始化cellForRowAtIndexPath
,如此:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Initialize cell
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
// if no cell could be dequeued create a new one
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
// No cell seperators = clean design
tableView.separatorColor = [UIColor clearColor];
// title of the item
cell.textLabel.text = _matchCenterArray[indexPath.section][@"Top 3"][indexPath.row][@"Title"];
cell.textLabel.font = [UIFont boldSystemFontOfSize:14];
// price of the item
cell.detailTextLabel.text = [NSString stringWithFormat:@"$%@", _matchCenterArray[indexPath.section][@"Top 3"][indexPath.row][@"Price"]];
cell.detailTextLabel.textColor = [UIColor colorWithRed:0/255.0f green:127/255.0f blue:31/255.0f alpha:1.0f];
// image of the item
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:_matchCenterArray[indexPath.section][@"Top 3"][indexPath.row][@"Image URL"]]];
[[cell imageView] setImage:[UIImage imageWithData:imageData]];
return cell;
}
如何在cell
中访问heightForRowAtIndexPath
?
答案 0 :(得分:3)
如果你可以在这里使用第三方库,那就可以了:
在UITableViewController
- (void)loadView
{
self.tableView = [[SLExpandableTableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
}
实施 SLExpandableTableViewDatasource 协议
- (BOOL)tableView:(SLExpandableTableView *)tableView canExpandSection:(NSInteger)section
{
// return YES, if the section should be expandable
}
- (BOOL)tableView:(SLExpandableTableView *)tableView needsToDownloadDataForExpandableSection:(NSInteger)section
{
// return YES, if you need to download data to expand this section. tableView will call tableView:downloadDataForExpandableSection: for this section
}
- (UITableViewCell<UIExpandingTableViewCell> *)tableView:(SLExpandableTableView *)tableView expandingCellForSection:(NSInteger)section
{
// this cell will be displayed at IndexPath with section: section and row 0
}
实施 SLExpandableTableViewDelegate 协议
- (void)tableView:(SLExpandableTableView *)tableView downloadDataForExpandableSection:(NSInteger)section
{
// download your data here
// call [tableView expandSection:section animated:YES]; if download was successful
// call [tableView cancelDownloadInSection:section]; if your download was NOT successful
}
- (void)tableView:(SLExpandableTableView *)tableView didExpandSection:(NSUInteger)section animated:(BOOL)animated
{
//...
}
- (void)tableView:(SLExpandableTableView *)tableView didCollapseSection:(NSUInteger)section animated:(BOOL)animated
{
//...
}
答案 1 :(得分:1)
您可以使用
获取每个单元格UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath];
另一种方法,如果要显示的单元格按顺序排在前3位,而不是使用cell.tag,则可以使用
if (indexPath.row > 3 || self.hasPressedShowMoreButton){
return 0;
}
将bool hasPressedShowMoreButton
添加到tableview类
当他们按下show more按钮时你可以让按钮事件处理程序设置bool并重新加载tableview
-(IBAction)pressedShowMoreButton{
self.hasPressedShowMoreButton = YES;
[self.tableView reloadData];
}
我认为比使用标签更清洁
在任何一种情况下,请确保在用户点击show more按钮时重新加载表格视图。