views:

55

answers:

1

I have a generic UISplitViewController (UITableView in the RootViewController and other stuff in the detail view)

I have modified UITableViewCells in 2 ways:

  1. The rows have a height of 55
  2. The UITableViewCells contain both a UIImage and UILabel

There are 50 rows total

PROBLEM: When I launch the app, the first 13 rows (the ones that are visible) DO NOT DISPLAY. I get empty rows.

If I scroll away from the first 13 rows and then scroll back…THEY APPEAR.

Any thoughts on what I'm doing wrong?

Here's my relevant code (I omitted general stuff like dealloc).

////////// header file /////////////////////////
#import <UIKit/UIKit.h>

@class c_cell;  // my custom UITableViewCell class (with cell height of "55")
@class DetailViewController;

@interface RootViewController : UITableViewController {
    DetailViewController *detailViewController;
    IBOutlet c_cell *cc;
    NSArray                 *cell_names;
    NSArray                 *cell_tlas;
}

@property (nonatomic, retain) IBOutlet DetailViewController *detailViewController;

@property (nonatomic, retain) IBOutlet c_cell   *cc;
@property (nonatomic, retain) NSArray *cell_names;
@property (nonatomic, retain) NSArray *cell_tlas;

@end


/////////////////  end header file /////////////////////

implementation file

  #import "RootViewController.h"
    #import "DetailViewController.h"
    #import "c_cell.h"


    @implementation RootViewController

    @synthesize detailViewController;

    @synthesize cc;
    @synthesize cell_names;
    @synthesize cell_tlas;


    #pragma mark View lifecycle

    - (void)viewDidLoad {
        [super viewDidLoad];
        self.clearsSelectionOnViewWillAppear = NO;
        self.contentSizeForViewInPopover = CGSizeMake(320.0, 600.0);

    }

    - (void)viewWillAppear:(BOOL)animated { 
        if (!self.cell_names) {
            self.cell_names = [NSArray arrayWithObjects:
                                  @"123",
                                  @"456",
                                  @"789", nil];     // 50 records in total...not just 3 as shown here
        }

        if (!self.cell_tlas) {
            self.cell_tlas = [NSArray arrayWithObjects:
                                 @"aaa",
                                 @"bba",
                                @"cca", nil]; // 50 records in total...not just 3 as shown here
        }
    }


    #pragma mark Table view data source
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView {
        return 1;
    }


    - (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section {
        return 50;
    }

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
        return 55;
    }

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        c_cell *cell   = (c_cell *)[tableView dequeueReusableCellWithIdentifier:@"ccc"];  // c_cell is my custom cell class
        if (!cell) {
            [[NSBundle mainBundle] loadNibNamed:@"c_cell" owner:self options:nil];
            cell = self.cc;
        }

        NSString *cell_string           = [self.cell_names objectAtIndex:indexPath.row];
        NSString *cell_tla              = [self.cell_tlas objectAtIndex:indexPath.row];
        NSString *cell_image_name       = [NSString stringWithFormat:@"%@.png", cell_tla];
        cell.cell_image.image           = [UIImage imageNamed:cell_image_name];
        cell.cell_label.text            = cell_string;

        return cell;
    }



    @end
A: 

At the bottom of viewWillAppear, add [[self tableView] reloadData];

Jared P