创建 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 高度:?