创建 tableView 的自定义 CellView 后,我仍然没有得到多列视图。谁能帮我吗?

Posted

技术标签:

【中文标题】创建 tableView 的自定义 CellView 后,我仍然没有得到多列视图。谁能帮我吗?【英文标题】:After creating a Custom CellView of a tableView, still i am not getting the multiple column view. Can anyone help me out? 【发布时间】:2014-02-06 07:31:19 【问题描述】:

我有一个应用程序,其中我创建了自定义单元格,即 UITableViewCell。在主视图中,我需要 4 行 4 列。但我没有得到列视图,只是截图中看到的行。

我浏览了许多相关的帖子,但没有清楚地理解它们。谁能给我准确的解释和相关代码?

【问题讨论】:

您能提供更多信息吗?比如,应该在表格中显示的数据模型是什么?您尝试向情节提要中的单元格添加什么或以编程方式添加什么? 我在其中一列中提供仓库详细信息,在另一列中提供位置,在第三列中提供库存详细信息,在第四列中提供可用性。我创建了一个 UITableViewCell,它提供了自定义单元格,然后将文件导入 UITableView,并在主视图中初始化了 tableView。我仍然只得到行而不是列。 好的,你能告诉我- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法在你的UITableViewController 子类中的内容吗? int iRowIndex = indexPath.row;static NSString CellIdentifier = @"Cell";NSString *strCellType = @"Data";if(iRowIndex == 0) strCellType = @"Header"; PartCellView *cell = (PartCellView)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil)cell = [[PartCellView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; else[cell cleanCell];[cell addContentViews]; if(cell.lblWareHouse)cell.lblWareHouse.text = nil; if(cell.lblLocation)cell.lblLocation.text = nil; if(cell.lblInStockQuantity)cell.lblInStockQuantity.text = nil; if( iRowIndex == 0) cell.accessoryType = UITableViewCellAccessoryNone; else cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 【参考方案1】:

您不能使用UITableView 来创建列。尝试改用UICollectionView

【讨论】:

你能告诉我如何使用 UICollectionView: 我需要在每个单元格中获取 4 行和 4 列以及一些数据。你能告诉我怎么去吗? 查看这些教程:appcoda.com/ios-programming-uicollectionview-tutorial 和 raywenderlich.com/22324/… 根据应显示的数据,UICollectionView 不适合。只需在表格单元格中添加四个 UILabel 即可实现一个简单的四列表格。【参考方案2】:

如果我的问题和某些 cmets 正确,则需要一个包含四列的表格。我实现这种观点的方法如下。

在情节提要中添加一个 UITableViewController。 选择动态原型单元格(并且可以选择将单元格数设置为 2,如果您 喜欢稍后添加标题行)。 选择单元格并将样式设置为自定义。 将单元格的标识符设置为“WarehouseCell”。 将标题单元格的标识符设置为“HeaderCell”。 为每个单元格添加四个 UILabel 并根据需要排列它们。 为“WarehouseCell”的 UILabel 指定标签 1 到 4。

假设您有一个数据模型,其中包含一组字典来存储您的仓库(例如 @property NSArray *warehouses;),您可以在 UITableViewController 子类中实现类似的东西...

- (void)viewDidLoad

    [super viewDidLoad];

    self.warehouses = @[
                        @@"warehouse":@"1",@"location":@"North Pole",@"stock":@"1.200",@"available":@"YES",
                        @@"warehouse":@"2",@"location":@"South Pole",@"stock":@"0",@"available":@"NO",
                        @@"warehouse":@"7",@"location":@"Moon Base",@"stock":@"8.500",@"available":@"YES",
                        @@"warehouse":@"10",@"location":@"Mars",@"stock":@"n/a",@"available":@"n/a"
                       ];


#pragma mark - Table View

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    return 1;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    return self.warehouses.count + 1;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    UITableViewCell *cell;

    if (indexPath.row == 0) 
        cell = [tableView dequeueReusableCellWithIdentifier:@"HeaderCell" forIndexPath:indexPath];
     else 
        cell = [tableView dequeueReusableCellWithIdentifier:@"WarehouseCell" forIndexPath:indexPath];
        ((UILabel*)[cell viewWithTag:1]).text = [self.warehouses[indexPath.row-1] valueForKey:@"warehouse"];
        ((UILabel*)[cell viewWithTag:2]).text = [self.warehouses[indexPath.row-1] valueForKey:@"location"];
        ((UILabel*)[cell viewWithTag:3]).text = [self.warehouses[indexPath.row-1] valueForKey:@"stock"];
        ((UILabel*)[cell viewWithTag:4]).text = [self.warehouses[indexPath.row-1] valueForKey:@"available"];
    

    return cell;

生成的视图应该是这样的,它是一个 iOS7 风格的表格。

【讨论】:

【参考方案3】:

如果您使用的是 iOS6.0 或更高版本,那么 UICollectionView 可能是最好的选择,否则您可以使用以下任何库:

    KKGridView

    UIGridView

    AQGridView

    NRGridView

    MMGridView

    WCGridView

【讨论】:

UICollectionView 只会给我带有图像的单元格,对吗?我需要在每个单元格中有一些数据。我将如何获得它?

以上是关于创建 tableView 的自定义 CellView 后,我仍然没有得到多列视图。谁能帮我吗?的主要内容,如果未能解决你的问题,请参考以下文章

具有多行 UILabel 的自定义 Tableview 单元格需要动态高度

未在具有自定义文本字段的自定义 TableView 中设置第一响应者

在另一个视图控制器展开 segue 后重新加载 UIView 数据上的自定义 tableview

单击tableView后隐藏xib的自定义UITableViewCell

TableView 的自定义复选框给出 NSManagedObject 错误

从 -tableView:cellForRowAtIndexPath: 计算“indexPath”处的自定义 UITableViewCell 高度:?