UITableView с пользовательской ячейкой - PullRequest
0 голосов
/ 09 июля 2010

У меня есть UIView, и на нем у меня есть табличное представление, табличное представление использует пользовательские данные, передаваемые из NSArray. Происходит какая-то странность в том, что в лучшем случае я могу заставить таблицу отображать только 2 ячейки, хотя там 10 ячеек и все 10 заполнены.

У меня другой перо расположено так же, и он отлично работает.

Снимок экрана происходящего (5 - 5 из 10 ячеек, все из которых заполнены данными).

http://img692.imageshack.us/img692/1465/screenshot20100708at215.jpg

-(UITableViewCell *)tableView:(UITableView *)tblView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"ISB points cellForRowAtIndexPath start");
    NSLog(@"Elements in array = %d",[self.listData count]);
    //
    static NSString *cellID = @"PointsCellIdentifier";

    PointsCustomCell *cell = [tblView dequeueReusableCellWithIdentifier:cellID];

    if( cell == nil )
    {
        NSArray *nibObjects = [[NSBundle mainBundle]loadNibNamed:@"PointsCustomCell" owner:nil options:nil];

        for( id currentObject in nibObjects )
        {
            NSLog(@"nibObjects count = %d", [nibObjects count]);

            if( [currentObject isKindOfClass:[PointsCustomCell class]] )
            {
                cell = (PointsCustomCell *)currentObject;
            }// if
        }// for
    }// if

    if( indexPath.row < [listData count] )
    {
        RiderPointsData *riderPts = (RiderPointsData *)[listData objectAtIndex:indexPath.row];      
        cell.posLabel.text = riderPts.pos;
        cell.nameLabel.text = riderPts.name;
        cell.pointsLabel.text = riderPts.points;
        cell.winsLabel.text = riderPts.wins;
        //[riderPts release];               
    }

    NSLog(@"ISB points cellForRowAtIndexPath end");

    return cell;
}

Ответы [ 2 ]

1 голос
/ 09 июля 2010

Похоже, что вы перебираете все объекты в вашем перо, которые, возможно, включают UITableViewCell и 4 UILabels, которые он содержит, и только в некоторых случаях ячейка назначается правильно.

Вам не нужен массив nibObjects или цикл for. Если вы дадите loadNibNamed owner параметр, он установит для владельца файла это значение. Вам также не нужна проверка indexPath.row < [listData count], если ваш метод numberOfRowsInSection возвращает [listData count]. Поэтому измените свой код на:

-(UITableViewCell *)tableView:(UITableView *)tblView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *cellID = @"PointsCellIdentifier";

   PointsCustomCell *cell = [tblView dequeueReusableCellWithIdentifier:cellID];

   if( cell == nil )
   {
     [[NSBundle mainBundle]loadNibNamed:@"PointsCustomCell" owner:self options:nil];

     // assign IB outlet to cell
     cell = self.cellOutlet; // cellOutlet should be whatever you name your IBOutlet
     self.cellOutlet = nil;

   }// if

   RiderPointsData *riderPts = (RiderPointsData *)[listData objectAtIndex:indexPath.row];      
   cell.posLabel.text = riderPts.pos;
   cell.nameLabel.text = riderPts.name;
   cell.pointsLabel.text = riderPts.points;
   cell.winsLabel.text = riderPts.wins;

   return cell;
}

и

  1. Создание выхода UITableViewCell в вашем контроллере
  2. Сделайте ваш контроллер владельцем файла в PointsCustomCell.xib
  3. Свяжите вашу UITableViewCell с розеткой, созданной на шаге 1
0 голосов
/ 09 июля 2010

Похоже, что некоторые данные в listData имеют значение NULL.Как вы заполняете свои listData?Думаю, лучше, если вы добавите эти две строки и посмотрим вывод консоли.

//add this line in tableView:cellForRowAtIndexPath:
NSLog(@"indexPath.row = %d listData.count = %d ",indexPath.row,[listData count]);
//add this line in if( indexPath.row < [listData count] )
NSLog(@"RiderPointsData = %@ %@", riderPts,[riderPts class]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...