'UITableView dataSource должен возвращать ячейку из tableView: cellForRowAtIndexPath:' - PullRequest
1 голос
/ 20 июля 2011

мой код

// Настройка внешнего вида ячеек табличного представления.

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];


    ///   labels - names of Cities   ///


    UILabel *lblCity = [[UILabel alloc]initWithFrame:CGRectMake(15, 00, 200, 22)];
    lblCity.font = [UIFont systemFontOfSize:14];
    lblCity.backgroundColor = [UIColor clearColor];
    //lblCity.backgroundColor = [UIColor redColor];

    UILabel *lblDate = [[UILabel alloc]initWithFrame:CGRectMake(200, 00, 200, 22)]; 
    lblDate.font = [UIFont systemFontOfSize:14];
    lblDate.backgroundColor = [UIColor clearColor];
    //lblDate.backgroundColor = [UIColor redColor];

    UILabel *lblSchool = [[UILabel alloc]initWithFrame:CGRectMake(350, 00, 400, 22)];
    lblSchool.font = [UIFont systemFontOfSize:14];
    lblSchool.backgroundColor = [UIColor clearColor];
    //lblSchool.backgroundColor = [UIColor redColor];


    ///    Labels for description of city events    ///


    UILabel *lblEvent = [[UILabel alloc]initWithFrame:CGRectMake(15, 00, 200, 30)];
    lblEvent.font = [UIFont systemFontOfSize:12];
    lblEvent.backgroundColor = [UIColor clearColor];

    UILabel *lblEventAtDate = [[UILabel alloc]initWithFrame:CGRectMake(200, 00, 200, 30)];
    lblEventAtDate.font = [UIFont systemFontOfSize:12];
    lblEventAtDate.backgroundColor = [UIColor clearColor];

    UILabel *lblEventAtSchool = [[UILabel alloc]initWithFrame:CGRectMake(350, 00, 400, 30)];
    lblEventAtSchool.font = [UIFont systemFontOfSize:12];
    lblEventAtSchool.backgroundColor = [UIColor clearColor];



    if(RequestType == 2)
    {

        UIImageView *imgEventLabel = [[UIImageView alloc]initWithFrame:CGRectMake(00, 00, 480, 22)];

        UIView *viewDescription = [[UIView alloc]initWithFrame:CGRectMake(00, 00, 480, 35)];


        if(indexPath.row == 0)

        {
            static NSString *CellIdentifier = @"Cell11";

            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

                lblCity.text = @"City" ;
            //  [cell addSubview:lblCity];

                lblDate.text = @"Date" ;
            //  [cell addSubview:lblDate];

                lblSchool.text = @"School" ;
            //  [cell addSubview:lblSchool];

                imgEventLabel.image = [UIImage imageNamed:@"city_date_place.png"];
            //  [cell addSubview:imgEventLabel];



                [imgEventLabel addSubview:lblCity];
                [imgEventLabel addSubview:lblDate];
                [imgEventLabel addSubview:lblSchool];

                [cell.contentView addSubview:imgEventLabel];

            }

            return cell;
        }

        if(indexPath.row == 1)

        {
            static NSString *CellIdentifier = @"Cell12";

            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

                cell.selectionStyle=UITableViewCellSelectionStyleNone;
                cell.backgroundColor=[UIColor clearColor];
                cell.textLabel.numberOfLines = 999;


                lblEvent.text = @"Event in City";
                lblEventAtDate.text = @"Event on Date";
                lblEventAtSchool.text = @"Event at School";

                [viewDescription addSubview:lblEvent];
                [viewDescription addSubview:lblEventAtDate];
                [viewDescription addSubview:lblEventAtSchool];

                [cell.contentView addSubview:viewDescription];

            }

            return cell;


    }


    }

    // Configure the cell...

    return cell;
}

Я не знаю, где вина, пожалуйста, помогите.

Ответы [ 3 ]

5 голосов
/ 20 июля 2011

После вашего первого вызова dequeueReusableCellWithIdentifier: Вы не проверили на ноль и не создали новый, если в очереди на повторное использование нет доступных ячеек.

Другими словами, если в очереди повторного использования нет ячеек, ваш тип запроса не равен 2, а строка не равна 0 или 1, ваша ячейка не будет создана. Это вызывает исключение, которое вы видите в консоли.

0 голосов
/ 20 июля 2011

Извините, у меня недостаточно баллов, чтобы прокомментировать ваш вопрос.Вы пробовали использовать пользовательские ячейки?Пользовательская ячейка похожа на модификацию текущих TableViewCells.Вы можете делать практически все, что хотите, чтобы TableViewCells не предоставляли.Из того, что я вижу, вы хотите 3 ярлыка и 1 изображение.Обычный TableViewCell не даст вам такой возможности иметь 3 метки.Если вы не создадите это сами.Ниже ссылка для вас, чтобы сделать это.Я надеюсь, что это то, что вы имеете в виду.

Учебное пособие по созданию пользовательских ячеек iPhone

0 голосов
/ 20 июля 2011
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

вам не нужно писать это при запуске, когда вы создаете ячейку в соответствии с условиями.

В конце просто верните ноль.Потому что я думаю, что должно быть какое-то условие, когда вы выполняете свой код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...