2011-08-22 6 views
0

nib에서 UITableViewCell을로드하는 데 문제가 있습니다. 나는 애플의 문서를 사용했지만 어디서 잘못 될지 모르겠다. IB를 통해 생성 된 UITableViewCell에는 5 개의 UIlable이 포함됩니다. 펜촉은 완벽하게로드되지만 문제는 라벨의 텍스트가 자동으로 다른 것으로 스크롤 될 때입니다. 다음은 indexpath에있는 행에 대한 셀 코드입니다. 내가 어디로 가고 있는지 알려주세요.nit에서로드하는 UITableViewCell에 문제가 있습니다

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
int rowNo = [indexPath row]; 
NSLog(@"Row No:%d",rowNo); 
Transfer *tempTransferRecord =(Transfer*)[self.transferInformation objectAtIndex:rowNo]; 
seasonYear.text=tempTransferRecord.seasonYear; 
longName.text=tempTransferRecord.longName; 
transactionDate.text=tempTransferRecord.transactionDate; 
toTeam.text=tempTransferRecord.toTeam; 
fromTeam.text=tempTransferRecord.fromTeam; 
/* 
static NSString *MyIdentifier = @"MyIdentifier2";  
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier] ; 

if (cell == nil) 
{ 
    [[NSBundle mainBundle] loadNibNamed:@"PlayerTransfers" owner:self options:nil]; 
    cell=transfersInfoCell; 
    self.transfersInfoCell=nil; 
} 

*/ 


static NSString *CellIdentifier = @"MyIdentifier2"; 
static NSString *CellNib = @"PlayerTransfers"; 

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellNib owner:self options:nil]; 
    cell = (UITableViewCell *)[nib objectAtIndex:0]; 
} 

// perform additional custom work... 

return cell; 

} 
+0

Interface Builder의 'UITableViewCell' 파일의'File 's Owner' 객체가 위의 코드를 작성한 클래스로 설정되어 있는지 확인하십시오. 또한 현재로드 된 버전보다 주석 처리 된 셀로드 버전을 사용합니다 용도; 테이블 뷰가있는 클래스에'transfersInfoCell' 속성을 추가하고이를 테이블 뷰 셀의 인터페이스 정의에 연결하십시오. 당신이 정의한 @property가 명시 적으로 ('assign') 아니라면,'transfersInfoCell = nil' 전에'self.'도 제거해야합니다. – darvids0n

+0

나는 모든 것을 모두 준비했습니다. IB의 식별자는 MyIdentifier2이고 @property는 (비 원자, 할당)입니다. 테이블에 문제가 생기고 스크롤 할 때 UItableviewcell의 텍스트가 바뀝니다. – slonkar

답변

1

상단의 셀로드 코드를 cellForRowAtIndexPath으로 이동하고 그 후에 rowNo 및 값 설정을 시도해보십시오. 내용을 변경하는 셀은 처음 설정할 때와 스크롤 할 때 또는 잘못된 시점에 값을 설정하는 경우 (예 : 행 5에서는 값을 설정하지만 행 6을로드하는 경우) 펜촉에서, 또는 행에 값을 설정하고 나중에 펜촉을로드하면 설정 한 값이 덮어 쓰기됩니다. 또한, (PlayerTransfers*)cell.seasonYear.text = tempTransferRecord.seasonYear 또는 (UILabel *)[cell viewWithTag:1].text = tempTransferRecord.seasonYear이 아닌 지역 변수를 설정하는 것이 조금 걱정됩니다. 테이블 뷰 클래스가 아닌 각 셀 내에 값을 설정하면 안됩니까? 왜 값이 다른 값으로 변하는지를 설명 할 수 있습니다. 동일한 변수를 사용하여 모든 셀을 설정할 수 있습니다.

+0

여기 내가 무슨 짓을 .. – slonkar

+0

여기 내가 무슨 짓을 한거야 ... 내가 TableViewController 클래스에서 5 UILabels을 만들었고 속성 (비 원자, 유지) 및 나중에 구현 파일에서 합성. transferInformation은 한 팀에서 다른 팀으로 각 플레이어가 이전 할 때 레코드를 보유하는 NSmutable 배열입니다. 이 레코드에는 5 개의 필드가 있습니다. Season, longName, transactiondate, toteam 및 fromteam. 이제 cellforrowatIndexpath에서 임시 레코드를 만들고 인덱스를 기반으로하는 transferinformation 배열에서 해당 정보를 꺼냅니다. 이 정보는 앞서 만든 UIlabels에 할당됩니다. – slonkar

+0

그럼에도 불구하고 한 번에 한 화면에 한 명의 플레이어 만 전송해야하며 정보는 표보기 셀에 표시되지 않습니다. 테이블 뷰 셀에 표시되도록하려면 UITableViewController 클래스에 UILabel을 생성하지 말고 UITableViewCell 클래스에 만들고 UITableViewCell 클래스의 값을'cellForRowAtIndexPath'에 설정하십시오. – darvids0n

0

Interface Builder에서 CellIdentifier을 설정 했습니까?

+0

그래, 그랬어 ... – slonkar