Question

I am developing a Universal app. In this app there is a UITableView. Problem is that the header row in TableView is repeating after 6 rows in iphone and 9 rows in iPad.

I googled but not find solution to solve this header issue. please help.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.

    return [tripList count];
}

UiTableview cellForRowAtIndexPath code:

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

    static NSString *CellIdentifier = @"Cell";

    UILabel *lblTripNumber = nil;
    UILabel *lblTripState = nil;
    UIImageView *imgTripState = nil;
    UILabel *lblStateTitleText = nil;
    UILabel *lblTripNUmberTitleValue = nil;

    static NSUInteger const kTripNumberLabelTag = 2;
    static NSUInteger const kTripStateLabelTag = 3;
    static NSUInteger const kTripImageTag = 4;


    BOOL isiPhone = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone;
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(indexPath.row == 0)
    {
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

            if (!isiPhone) // 1=Ipad        
            {
                lblStateTitleText = [[[UILabel alloc] initWithFrame:CGRectMake(205, 27, 250, (cell.contentView.frame.size.height))] autorelease];
                lblStateTitleText.font = [UIFont boldSystemFontOfSize:32];
            }
            else
            {
                lblStateTitleText = [[[UILabel alloc] initWithFrame:CGRectMake(65, 10, 130, (cell.contentView.frame.size.height))] autorelease];
                lblStateTitleText.font = [UIFont boldSystemFontOfSize:16];
            }
            lblStateTitleText.textAlignment = UITextAlignmentLeft;
            lblStateTitleText.backgroundColor = [UIColor clearColor];
            lblStateTitleText.tag = 11;     
            lblStateTitleText.text = @"Trip State"; 
            lblStateTitleText.textColor = [UIColor cyanColor];
            [cell.contentView addSubview:lblStateTitleText];

            if (!isiPhone) // 1=Ipad        
            {
                lblTripNUmberTitleValue = [[[UILabel alloc] initWithFrame:CGRectMake(445, 27, 290, (cell.contentView.frame.size.height))] autorelease];
                lblTripNUmberTitleValue.font = [UIFont boldSystemFontOfSize:32];
            }
            else
            {
                lblTripNUmberTitleValue = [[[UILabel alloc] initWithFrame:CGRectMake(180, 10, 250, (cell.contentView.frame.size.height))] autorelease];
                lblTripNUmberTitleValue.font = [UIFont boldSystemFontOfSize:16];
            }
            lblTripNUmberTitleValue.textAlignment = UITextAlignmentLeft;
            lblTripNUmberTitleValue.backgroundColor = [UIColor clearColor];
            lblTripNUmberTitleValue.tag = 12;       
            lblTripNUmberTitleValue.text = @"Confirmation#";    
            lblTripNUmberTitleValue.textColor = [UIColor greenColor];
            [cell.contentView addSubview:lblTripNUmberTitleValue];  

        }

    }
    else 
    {   
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

            CGFloat xIndex = 6.0;       
            CGFloat xIpadIndex = 6.0;

            CGFloat TripNumberLabelWidth = 130.0;

            if (!isiPhone) // 1=Ipad        
            {
                imgTripState = [[[UIImageView alloc] initWithFrame:CGRectMake(xIndex, 18, 50, 64)] autorelease];
            }
            else
            {
                imgTripState = [[[UIImageView alloc] initWithFrame:CGRectMake(xIndex, 8, 32, 32)] autorelease];
            }

            imgTripState.tag = kTripImageTag;
            [cell.contentView addSubview:imgTripState];

            xIndex +=73;
            xIpadIndex +=85;

            if (!isiPhone) // 1=Ipad        
            {
                lblTripState = [[[UILabel alloc] initWithFrame:CGRectMake(xIpadIndex, 25, TripNumberLabelWidth, (cell.contentView.frame.size.height))] autorelease];
                lblTripState.font = [UIFont boldSystemFontOfSize:38];
            }
            else
            {
                lblTripState = [[[UILabel alloc] initWithFrame:CGRectMake(xIndex, 1, TripNumberLabelWidth, (cell.contentView.frame.size.height))] autorelease];
                lblTripState.font = [UIFont boldSystemFontOfSize:20];
            }
            lblTripState.textAlignment = UITextAlignmentLeft;
            lblTripState.backgroundColor = [UIColor clearColor];
            lblTripState.tag = kTripStateLabelTag;      
            lblTripState.textColor = [UIColor colorWithRed:(0.0/255) green:(241.0/255) blue:(216.0/255) alpha:1.0f];
            [cell.contentView addSubview:lblTripState];

            xIndex +=132;
            xIpadIndex +=120;

            if (!isiPhone) // 1=Ipad
            {
                lblTripNumber = [[[UILabel alloc] initWithFrame:CGRectMake(xIpadIndex, 25, TripNumberLabelWidth, (cell.contentView.frame.size.height))] autorelease];
                lblTripNumber.font = [UIFont boldSystemFontOfSize:35];
            }
            else
            {
                lblTripNumber = [[[UILabel alloc] initWithFrame:CGRectMake(xIndex, 0, TripNumberLabelWidth, (cell.contentView.frame.size.height))] autorelease];
                lblTripNumber.font = [UIFont boldSystemFontOfSize:18];
            }

            lblTripNumber.textAlignment = UITextAlignmentLeft;
            lblTripNumber.backgroundColor = [UIColor clearColor];
            lblTripNumber.tag = kTripNumberLabelTag;        
            lblTripNumber.textColor = [UIColor greenColor];
            [cell.contentView addSubview:lblTripNumber];

        }else
        {
            // A reusable cell was available, so we just need to get a reference to the subviews using their tags.
            lblTripNumber = (UILabel *)[cell.contentView viewWithTag:kTripNumberLabelTag];
            lblTripState = (UILabel *)[cell.contentView viewWithTag:kTripStateLabelTag];
        //  imgTripState = (UILabel *)[cell.contentView viewWithTag:kTripImageTag];
        }

        lblTripNumber.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
        lblTripState.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;


        int indCount = indexPath.row -1;
        TripDetails *trip = [tripList objectAtIndex:indCount];
        lblTripNumber.text = trip.tripNumber;
        lblTripState.text = trip.tripState;


    // Configure the cell...

    return cell;
}
Was it helpful?

Solution 2

I got that , I removed

if (cell == nil) 

and it worked fine. Actually it was looking for its tags in first header row and could not replace its values, so was creating problem.

OTHER TIPS

You probably have only 6 items in your TableData.

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

   return [TableData count];

}

In your case 'TableData' is 'tripList'.

check your viewFor header in section. if you are using array for your header views, then this array object is not properly allocated memory. it uses last object for all it's occurance and replace the old. Make a memory allocated object of array before you add objects to it. tell me if this is the solution

Your code tries to reuse the cells, but the way you coded that is wrong. See my answer here for the appropriate pattern. In a nut shell, you should only define shared cell attributes in if (cell == nil) section, the row specific attributes, like label text etc. should be defined outside of this section. This is not the case for your row at index 0.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top