0

4つのラベルを使用してストーリーボードにプロトタイプセルを作成しました

次に、私のコードで、最初、最後、およびその他の行に異なる背景画像を追加しています。最初の行では、4つのラベルすべてが非表示になっています。

最初は画面に表示されている5行すべてが良好に表示されますが、上にスクロールして6行目を表示すると、最初の行のように動作し、4つのラベルすべてが非表示になります。

これが私のコードです:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath    *)indexPath
{

Employee *currentEmployee=[Employee sharedData];
NSArray *tempArray =currentEmployee.leaveApproveDict;
static NSString *simpleTableIdentifier = @"approveLeaveCell";


approveLeaveCell *cell = [self.approveLeaveView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
    cell = [[approveLeaveCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}


if([tempArray count]!=0){
    if(indexPath.row == 0){
        UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"h_t_top_bar.png"]];
        cell.backgroundView = imgView;
        cell.fromLabel.hidden=YES;
        cell.toLabel.hidden=YES;
        cell.typeLabel.hidden=YES;
        cell.nameLabel.hidden=YES;
        [cell setUserInteractionEnabled:NO];
    }
    else{
        if(indexPath.row ==[tempArray count]){
            UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"h_t_bottom_bar.png"]];
            cell.backgroundView = imgView;
        }
        else{
            UIImageView *imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"h_t_repeat_bar.png"]];
            cell.backgroundView = imgView;

        }

        //assign the data
        if(indexPath.row-1 < [tempArray count]){
            NSDictionary *tempLeave= [currentEmployee.leaveApproveDict objectAtIndex:indexPath.row-1];
            cell.toDateLabel.text=[self extractLeaveDate:(NSString*) [tempLeave objectForKey:@"leaveTo"]];
            cell.fromDateLabel.text=[self extractLeaveDate:(NSString*)[tempLeave objectForKey:@"leaveFrom"]];
            cell.leaveLabel.text=[tempLeave objectForKey:@"leaveType"];
            cell.employeeNameLabel.text=[tempLeave objectForKey:@"requesterName"];

    }
}

return cell;
     }
4

3 に答える 3

2

同じ問題が私にも起こります。私は2つの異なるカスタマイズさUITableViewCellれた2つの識別子を使用してそれを解決しました。

オブジェクトは、現在再利用可能なセルのUITableViewキュー(またはリスト)を維持し、それぞれが独自の再利用識別子を持ち、dequeueReusableCellWithIdentifier:メソッドでデリゲートがそれらを利用できるようにします。

于 2013-03-01T06:40:01.213 に答える
0

プロジェクトでARCを使用しましたか?arcを使用しなかった場合、セルは自動解放を使用する必要があります。

cell = [[[approveLeaveCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier] autorelease];
于 2013-03-01T06:32:55.507 に答える
0
 /* Remove all existing content from list and reload them again to avoid 
     * overlay of cell content */

    for(UIView *view in cell.contentView.subviews){
        if ([view isKindOfClass:[UIView class]]) {
            [view removeFromSuperview];
        }
    }
// VKJ
于 2013-11-16T11:37:50.047 に答える