我一直在互联网上搜索大约两天,但我似乎无法理解这是如何工作的。
我有两个视频单元FeaturedVideoCell和YouTubeVideoCell。只有一个FeaturedVideoCell和多个YouTubeVideoCells ......
我正在运行数据获取算法并将获取填充两个单元格的数据,然后通过重新加载表格数据来填充单元格。每个单元格根据相应数组中的对象计数填充一定数量的行。
我让它为YouTubeVideoCells工作,但似乎无法让第二个功能完成。我得到一个错误或者它没有加载我的第一个单元格。我尝试过这个网站和其他网站的多个解决方案,我感到非常沮丧。有谁知道这个适当的实现技术?我也在使用故事板......
// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(isFiltered)
{
return filteredyoutuberArray.count;
}
else
{
return youtuberArray.count;
}
}
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"videoCell";
YouTubeVideoCell *cell = nil;
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[YouTubeVideoCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
YouTubeVideoObj* tempVideo = [[YouTubeVideoObj alloc] init];
if(isFiltered == TRUE)
{
tempVideo = [filteredyoutuberArray objectAtIndex:indexPath.row];
}
else
{
tempVideo = [youtuberArray objectAtIndex:indexPath.row];
}
cell.YouTuberName.text = tempVideo.YouTuberName;
cell.totalUploadViews.text = tempVideo.totalUploadViews;
cell.subscribers.text = tempVideo.subscribers;
cell.videoCount.text = tempVideo.videoCount;
cell.orderNum.text = tempVideo.orderNum;
cell.profile.image = tempVideo.profile;
[cell setNeedsLayout];
[cell setNeedsDisplay];
[cell prepareForReuse];
return cell;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
答案 0 :(得分:1)
阿。我想我知道发生了什么......你有两个不同的UITables吗? 如果是这样,无论选择/触摸/调用/填充哪个单元格/表格,都会触发相同的方法cellForRowAtIndexPath。
如果这是您的问题,请尝试检测WHICH表当前正在调用该方法,然后在每种情况下执行相应的操作。例如:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// blah blah cell stuff
if(tableView == YouTubeTable) {
// assign relevant data to relevant table based on relevant row
}
else if (tableView == FeaturedTable) {
// ditto but with different relevance
}
}
???
答案 1 :(得分:0)
而不是采取2个单独的细胞, 分2节,
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 2; // 2 sections
}
1表示静态单元格,另一部分表示动态单元格元素。 它更加微妙
答案 2 :(得分:0)
您已经实现了它,就像您将isFilter的值设置为TRUE一样,该表将显示filteredyoutuberArray单元格,如果isFilter的值为FALSE,则表格将显示youtuberArray单元格。那么你想要展示什么,tableView中的两种类型的单元格?如果是的话,
NSMutableArray *array = [[NSMutableArray alloc] initWithArray: filteredyoutuberArray];
[array addObjectsFromArray: youtuberArray];
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return filteredyoutuberArray.count+youtuberArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"videoCell";
YouTubeVideoCell *cell = nil;
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[YouTubeVideoCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
YouTubeVideoObj* tempVideo = [[YouTubeVideoObj alloc] init];
tempVideo = [array objectAtIndex:indexPath.row];
cell.YouTuberName.text = tempVideo.YouTuberName;
cell.totalUploadViews.text = tempVideo.totalUploadViews;
cell.subscribers.text = tempVideo.subscribers;
cell.videoCount.text = tempVideo.videoCount;
cell.orderNum.text = tempVideo.orderNum;
cell.profile.image = tempVideo.profile;
[cell prepareForReuse];
return cell;
}
如果您将采用两个部分,则必须检查该部分并相应地获取数组以获取对象。
答案 3 :(得分:0)
我实际上没有得到你的问题,但我想我应该告诉你下面的代码是非常糟糕的编码,尤其是[cell prepareForReuse];
在cellForRow:
之前被tableView调用,这会导致bug 。在大多数情况下,[cell setNeedsLayout];
不应该[cell setNeedsDisplay];
cellForRow:
调用{/ 1}} [cell setNeedsLayout];
[cell setNeedsDisplay];
[cell prepareForReuse];
。
{{1}}