UITableView
包含,假设,50行。第一行包含一个项目,每个偶数行索引单元格包含两个项目?为此我们需要XIB
为每个备用行使用两个视图?
totalrowcount 和cellAtRowatindexpath
逻辑的逻辑是什么?
还有其他选择吗?
UITableView
包含,假设,50行。第一行包含一个项目,每个偶数行索引单元格包含两个项目?为此我们需要XIB
为每个备用行使用两个视图?
totalrowcount 和cellAtRowatindexpath
逻辑的逻辑是什么?
还有其他选择吗?
我想你的桌子是这样的:
+---------------------+
| Data 1 | --> Cell Type 1
+---------------------+
| Data 2 | Data 3 | --> Cell Type 2
+---------------------+
| Data 4 |
+---------------------+
| Data 5 | Data 6 |
+---------------------+
. ... .
首先,您应该UITableViewCell
为这些细胞类型设计两种不同的笔尖。就个人而言,我会使用 Storyboard,设计两个具有不同标识符的动态单元格,并在需要时调用它们。例如:
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"Cell Type 1"];
让我们来看看 tableView 的数据源方法。我假设数据存储在一个名为self.tableData
. 您可以构建一个逻辑来返回行数,如下所示:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return ceil([self.tableData count]*(2.0f/3.0f));
}
然后在您的cellForRowAtIndexPath
方法中,返回这些单元格。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell;
NSUInteger objectIndex = floor(indexPath.row*(3.0f/2.0f));
if (indexPath.row % 2 == 0) {
// define cell as Cell Type 1 from nib
cell.yourLabel.text = [self.tableData objectAtIndex:objectIndex];
} else {
// define cell as Cell Type 2 from nib
cell.yourLabel1.text = [self.tableData objectAtIndex:objectIndex];
cell.yourLabel2.text = [self.tableData objectAtIndex:(objectIndex+1)];
}
return cell;
}
请注意,我假设您的tableData
数组包含NSString
对象之类的东西,并且您的单元格上有UILabel
's 。上面的代码从相应索引中的数据源中获取对象并填充您的标签。
totalrowcount 为 50
cellForRowAtIndexpath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// make 2 cellidentifiers here and use it for different nib
UITableViewCell *cell;
if(indexpath.row==0){
//load first nib
}
else
{
//load second nib
}
return cell;
}
首先- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
在此处使用并传递 1 部分:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}
然后在- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
方法中,您将总行数作为数据源传递给表格视图。例如:如果您必须显示 50 行,则将 50 行传递为:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 50;
}
并且- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
您将根据需要传递单元格:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row %2 ==0)
{
// First alternaate cell which you need to display at even index
return ALTERNATE_NIB_1;
}
else
{
// Second alternaate cell which you need to display at odd index
return ALTERNATE_NIB_1;
}
return nil;
}
希望它可以帮助你。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.row % 2 == 0) {
//cell type 1
} else if(indexPath.row % 2 == 1) {
//cell type 2
}
}
上面的代码将帮助您分配备用单元格模式
如果您有 2 种类型的单元格,我建议使用 2 种不同的标识符,当您将单元格出列时,您会得到所需的单元格。