UITableView의 2가지 유형의 사용자 정의 UITableViewCells
내 UITableView에서 RSS 피드의 첫 번째 뉴스에 대해 사용자 정의 tableViewCell(유형 A는 말할 수 있음)을 설정하고 다른 뉴스에 대해서는 두 번째, 세 번째 등을 설정하고 싶습니다. 또 다른 사용자 정의 tableViewCell(trype B) 문제는 사용자 정의 tableViewCell( 첫 번째 뉴스를 위해 생성된 trype A)는 재사용되지만, 이상하게도 customViewCell(type A)의 첫 번째 사용과 동일한 유형의 customViewCell의 두 번째 출현 사이의 행 수가 같지 않습니다.
내 cellForRowAtIndexPath는 다음과 같습니다.
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
int feedIndex = [indexPath indexAtPosition:[indexPath length] - 1];
Feed *item = [[[[self selectedButton] category] feedsList] objectAtIndex:feedIndex + 1];
static NSString *CellIdentifier = @"Cell";
if(feedIndex == 0){
MainArticleTableViewCell *cell = (MainArticleTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[MainArticleTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
[[[cell subviews] objectAtIndex:0] setTag:111];
}
cell.feed = item;
return cell;
}
else{
NewsTableViewCell *cell = (NewsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[NewsTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier orientation:currentOrientation] autorelease];
[[[cell subviews] objectAtIndex:0] setTag:111];
}
cell.feed = item;
return cell;
}
return nil;
}
두 가지 유형의 셀은 올바르게 설정된 높이가 다릅니다. 누군가가 유형 A 사용자 정의 셀이 첫 번째 뉴스(재사용되지 않음)에만 나타나도록 하는 방법에 대해 올바른 방향으로 알려줄 수 있습니까? 감사 해요
두 가지 스타일의 셀에 대해 다른 셀 식별자를 생성해야 합니다.
- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
int feedIndex = [indexPath indexAtPosition:[indexPath length] - 1];
Feed *item = [[[[self selectedButton] category] feedsList] objectAtIndex:feedIndex + 1];
static NSString *CellIdentifier1 = @"Cell1";
static NSString *CellIdentifier2 = @"Cell2";
if(feedIndex == 0) {
MainArticleTableViewCell *cell = (MainArticleTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
if (cell == nil) {
cell = [[[MainArticleTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier1] autorelease];
[[[cell subviews] objectAtIndex:0] setTag:111];
}
cell.feed = item;
return cell;
}
else {
NewsTableViewCell *cell = (NewsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier2];
if (cell == nil) {
cell = [[[NewsTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier2 orientation:currentOrientation] autorelease];
[[[cell subviews] objectAtIndex:0] setTag:111];
}
cell.feed = item;
return cell;
}
return nil;
}
나는 당신의 질문을 완전히 이해하지 못했지만 두 가지 흥미로운 점을 발견했습니다. 두 개의 다른 셀 유형을 사용하는 경우 'dequeueReusableCellWithIdentifier'를 호출할 때 두 개의 고유한 셀 식별자를 사용해야 합니다. 현재 둘 다에 대해 동일한 식별자를 사용하고 있습니다. 이는 잘못된 것입니다. 다음과 같이 시도해 보세요.
static NSString *MainArticleIdentifier = @"MainArticle";
static NSString *NewsIdentifier = @"News";
또한 다음과 같은 것을 본 적이 없습니다.
int feedIndex = [indexPath indexAtPosition:[indexPath length] - 1];
그냥 사용하지 않는 이유:
int feedIndex = indexPath.row;
cellForRowAtIndexPath에서
if ("Condition for cell 1") {
cellV = ("customCell" *)[tableView dequeueReusableCellWithIdentifier:@"your ID cell in .xib"];
if (cellV == nil) {
[[NSBundle mainBundle] loadNibNamed:@"YOUR-CELL-FILENAME" owner:self options:nil];
cellV = "OUTLET-CEll-IN-VC";
}
} else {
cellV = ("customCell" *)[tableView dequeueReusableCellWithIdentifier:@"your ID cell2 in .xib"];
if (cellV == nil) {
[[NSBundle mainBundle] loadNibNamed:@"YOUR-CELL2-FILENAME" owner:self options:nil];
cellV = "OUTLET-CEll-IN-VC";
}
}
[self configureCell:cellV indexpath:indexPath withClipVo:clip];
return cellV;
ReferenceURL : https://stackoverflow.com/questions/1405688/2-different-types-of-custom-uitableviewcells-in-uitableview
'IT이야기' 카테고리의 다른 글
C++ 강제 컴파일 시간 오류/스위치의 암시적 폴스루에 대한 경고 (0) | 2021.09.22 |
---|---|
jq를 사용하여 숫자를 문자열로 변환 (0) | 2021.09.22 |
새 분기를 체크아웃할 때 *.pyc 파일 및 비어 있는 디렉토리를 자동으로 제거합니다. (0) | 2021.09.21 |
numpy.array의 임의 차원에 대해 반복 (0) | 2021.09.21 |
문자열에서 날짜/시간을 구문 분석하는 방법은 무엇입니까? (0) | 2021.09.21 |