简体   繁体   中英

UITableView first cell not set

The first row of my UITableViews are all blank, even though my NSLog's in function tableView .. cellForRowAtIndexPath, shows that row 0, 1, 2, ... are call call and initialized.

I make four UITableViews side-by-side, each with 40 rows. NSLog's show that the function with cellForRowAtIndexPath is called for all 40 rows, but each display row 0 is empty. Displayed row 1 contains the cell that I expect at row 0, row 2 contains the one for row 1, etc.

Here's the code that creates the UITableView data structure, and the function cellForRowAtIndexPath which builds its cells.

Here's the array of four UITableViews at the .m file scope level (at its beginning):

UITableView* channel_tableView[ TOTAL_TX_CHANNELS ];

And here's where the UITableViews are create in the function viewDidLayoutSubviews:

    for( int channel=0; channel < TOTAL_TX_CHANNELS; ++channel )
    {
        // Create channel_tableView:

            CGRect tableFrame = CGRectMake(x, y, width, height);

            channel_tableView[ channel ] = [[UITableView alloc]initWithFrame:tableFrame style:UITableViewStylePlain];

            channel_tableView[ channel ].rowHeight = channel_row_height;
            channel_tableView[ channel ].sectionFooterHeight = 0;
            channel_tableView[ channel ].sectionHeaderHeight = 0;
            channel_tableView[ channel ].scrollEnabled = YES;
            //new_channel_tableView.showsVerticalScrollIndicator = YES;
            channel_tableView[ channel ].userInteractionEnabled = YES;
            channel_tableView[ channel ].bounces = YES;

            channel_tableView[ channel ].delegate = self;
            channel_tableView[ channel ].dataSource = self;

        //  channel_tableView[ channel ].autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
            [channel_tableView[ channel ]  reloadData];             // display channel's TableView
            [[self view] addSubview:   channel_tableView[ channel ]];
    }

And here's the function that creates all the cells:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog( @"cellForRowAtIndexPath");
    NSLog( @"   %d  = row", indexPath.row  );



    UITextView*  test_textView;
    UITextView*  test_2nd_textView;
    UITextView*  test_3rd_textView;


    // Determine which channel_tableView:
        int channel;
        for( channel = 0; channel < TOTAL_TX_CHANNELS; ++channel )
        {
            if( tableView == channel_tableView[ channel ] )
                break;
        }
        // channel = tableView's channel
        NSLog( @"   %d  = channel", channel  );

    // DOCUMENTATION:  Table View Programming Guide for iOS > Adding subviews to a cellís content view
    // Give each cell a cell identifier unique to each channel tableView and unique to each row, so that each gets a unique data structure:
            NSString *CellIdentifier = [NSString stringWithFormat:@"%d_%d",channel,indexPath.row];

    //static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        // if nil: cell(chan, row) has not been created before.  <>nil: cell = data structure previously initialized
    if (cell == nil)
    {
        NSLog( @"       cell nil");
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: CellIdentifier];
        /* Though it's UITableViewCellStyleDefault, the three defaults (image, label, detail label) are nil
        if not set. */
    }
        // Add UITextView for channel pipe to cell:
            int pipe_width = 20;
            int w = pipe_width;
            int x = channel_tableView_width/2 - pipe_width/2;
            int h = channel_row_height;
            int y = 0;
            test_textView = [[UITextView alloc] initWithFrame:CGRectMake    (x,y, w,h)] ;
            [test_textView setFont:[UIFont boldSystemFontOfSize:8.0]];
            [test_textView setEditable:NO];
            [test_textView setTextAlignment:NSTextAlignmentCenter];
            // Round the corners and set border color
            if(channel == power_channel )
                [test_textView setBackgroundColor:[UIColor greenColor]];
            else
                [test_textView setBackgroundColor:[UIColor whiteColor]];
            [[test_textView layer] setBorderColor:[[UIColor blackColor] CGColor]];
            [[test_textView layer] setBorderWidth:1];
            //[[test_textView layer] setCornerRadius:15];
            [test_textView setClipsToBounds: YES];


        // Add UITextView for PWR RX to cell:
        int PWR_RX_width = channel_tableView_width/2;
         y = y + h ;
         w = PWR_RX_width;
         x = channel_tableView_width/2 - PWR_RX_width/2;
         h = 20;
            test_2nd_textView = [[UITextView alloc] initWithFrame:CGRectMake    (x,y, w,h)];
            [test_2nd_textView setFont:[UIFont boldSystemFontOfSize:8.0]];
            [test_2nd_textView setEditable:NO];
            [test_2nd_textView setTextAlignment:NSTextAlignmentCenter];
            // Round the corners and set border color
            [test_2nd_textView setBackgroundColor:[UIColor whiteColor]];
            [[test_2nd_textView layer] setBorderColor:[[UIColor blackColor] CGColor]];
            [[test_2nd_textView layer] setBorderWidth: 1];
            //[[test_2nd_textView layer] setCornerRadius:15];
            [test_2nd_textView setClipsToBounds: YES];      

        // Add UITextView for device to cell:
        int device_width = channel_tableView_width/2;
         y = y + h-3;
         w = device_width;
         x = channel_tableView_width/2 - device_width/2;
         h = 40;
            test_3rd_textView = [[UITextView alloc] initWithFrame:CGRectMake    (x,y, w,h)];
            [test_3rd_textView setFont:[UIFont boldSystemFontOfSize:8.0]];
            [test_3rd_textView setEditable:NO];
            [test_3rd_textView setTextAlignment:NSTextAlignmentCenter];
            // Round the corners and set border color  
            [test_3rd_textView setBackgroundColor:[UIColor whiteColor]];
            [[test_3rd_textView layer] setBorderColor:[[UIColor blackColor] CGColor]];
            [[test_3rd_textView layer] setBorderWidth: 1];
            //[[test_3rd_textView layer] setCornerRadius:15];
            [test_3rd_textView setClipsToBounds: YES];

        /*
                test_textView.tag = TEST_TEXTVIEW_TAG;
                test_2nd_textView.tag = TEST_2ND_TEXTVIEW_TAG;
                test_3rd_textView.tag = TEST_3RD_TEXTVIEW_TAG;

        test_textView     = (UITextView*)[cell.contentView viewWithTag: TEST_TEXTVIEW_TAG];
        test_2nd_textView = (UITextView*)[cell.contentView viewWithTag: TEST_2ND_TEXTVIEW_TAG];
        test_3rd_textView = (UITextView*)[cell.contentView viewWithTag: TEST_3RD_TEXTVIEW_TAG];
         */
    //[test_textView setText:     [NSString stringWithFormat: @"pipe-%d", indexPath.row ]];
    [test_2nd_textView setText: [NSString stringWithFormat: @"PWR RX %d", indexPath.row + 1 ]];
    [test_3rd_textView setText: [NSString stringWithFormat: @"device %d", indexPath.row + 1 ]];
            // Add created UI objects to cell[ indexPath.row ]:
                [cell.contentView addSubview:test_textView ];
                [cell.contentView addSubview:test_2nd_textView ];
                [cell.contentView addSubview:test_3rd_textView ];
    return cell;
}

SCREENSHOT SHOWING BLANK ROW-0 ..............................

在此处输入图片说明

Your test_2nd_textView and test_3rd_textView are being drawn outside the first table cell (which is not clipping), because you're initializing them with a frame with the y>=cell_height . For test_textView , y=0, h=cell_height . For test_2nd_textView , y=cell_height and h=20 , hence test_2nd_textView is drawn at the top of the second cell.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM