проблема с пользовательским uitableviewcell - PullRequest
0 голосов
/ 26 августа 2011

Последние несколько дней я играл с табличными представлениями, пытаясь привыкнуть к ним, сегодня я пытался создать настраиваемую ячейку uitableview, я работаю из Руководства по программированию табличного представления в документах Apple и получаю эту странную информацию.проблема с чем-то, что я пытаюсь сделать.

Я настроил файл пера пользовательской ячейки, на нем есть две метки, на обеих из которых есть теги (0 и 1). Я изменил класс владельцев файла на перо.который будет использовать его.

оттуда я начал программировать tableView: cellForRowAtIndexPath: метод, который отображает мои пользовательские ячейки внутри таблицы, однако, как вы увидите, только моя первая метка отображается, когда я назначаю ей строкуи я просто не знаю, почему ...

Настраиваемая ячейка Nib enter image description here

tableView: cellForRowAtIndexPath: метод

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"Cell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            //cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier] autorelease];
            [[NSBundle mainBundle] loadNibNamed:@"ManufactureSearchCell" owner:self options:nil];
            cell = vehicleSearchCell;
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
            self.vehicleSearchCell = nil;
        }
        // Configure the cell...
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        if(indexPath.section == 0)
        {
            if(indexPath.row == 0)
            {
                UILabel *label;
                label = (UILabel *)[cell viewWithTag:0];
                label.text = [[NSString alloc] initWithString:@"Manufacture :"];

                label = (UILabel *)[cell viewWithTag:1];
                label.text = [[NSString alloc] initWithString:@"empty"];
            }
            else if(indexPath.row == 1)
            {
//.....

Любая помощь будет оценена :))

Ответы [ 3 ]

5 голосов
/ 26 августа 2011

Остерегайтесь использования viewWithTag и 0. Это тег по умолчанию для всех представлений, поэтому дважды проверьте, что вы фактически получаете нужную метку вместо нее, а не фоновое представление ячейки, или вспомогательное представление, или любое другое представление по умолчанию, добавленное к клетка. Это может вызвать проблемы.

Если вы повторно используете ячейку, я бы порекомендовал создать собственный подкласс UITableViewCell и связать их через IB. Если вы не используете эту ячейку повторно и хотите, чтобы она отображалась только один раз, обязательно примите предложение Кароли просто использовать эти ярлыки в качестве IBOutlets.

0 голосов
/ 26 августа 2011

Это кажется мне странным. Почему вы используете

label.text = [[NSString alloc] initWithString:@"Manufacture :"];

, а не

label.text = @"Manufacture :";

То, что вы не отпускаете свои струны.использование короткой руки @ "xxx" создает строку, которая автоматически высвобождается.Не уверен, что это является причиной вашей проблемы, но MGMT с завинчивающейся памятью со строками может произвести такие же эффекты, как вы.Так что очистка будет хорошим началом.

Кроме того, убедитесь, что в IB, в котором вы указали ячейку, есть ссылка на свойство vehicleSearchCell владельцев файлов.Больше удара в темноте.

0 голосов
/ 26 августа 2011

Я вижу только одну вещь в коде при условии, что она торчит мне. Похоже, вы перезаписываете значение метки. Что из двух показывает?

UILabel *label1;
label = (UILabel *)[cell viewWithTag:0];
label.text = [[NSString alloc] initWithString:@"Manufacture :"];

UILabel *label2
label2 = (UILabel *)[cell viewWithTag:1];
label2.text = [[NSString alloc] initWithString:@"empty"];

Я бы для простоты просто объявил две метки. Или ты уже это сделал? Хотя все остальное работает? Вы программно создаете эти ярлыки? Если нет, то почему бы вам не подключить их через IB, не дать им уникальные имена и получить к ним доступ таким образом? На что установлен CellViewStyle? Похоже, у вас есть строка, которая установит что-то закомментированное, есть какая-то конкретная причина? Вы также можете проверить свои свойства в файле .xib вашей пользовательской ячейки, чтобы узнать, есть ли что-то, что вам нужно изменить.

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