Как загрузить Custom TableViewCell в TableView на Ipad? - PullRequest
2 голосов
/ 10 августа 2011

Во-первых, извините за мой английский, я француз:)

Как, скажем, в заголовке, я хочу поместить настраиваемую ячейку просмотра таблицы в простое представление таблицы на ipad.Это необходимо, потому что я хочу создать таблицу с 5 метками.

Я использую отдельный UITableViewCell класс с NIB.

Это мой код:

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

    CustomTableCell *cell = (CustomTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];    

    if (cell == nil)
    {
        [[NSBundle mainBundle] loadNibNamed:@"CustomTableCell" owner:self options:nil]; 
        cell = customTableCell;
        self.customTableCell = nil;
    }   

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    [self configureCell:cell atIndexPath:indexPath];

    NSString *rowLabelEcheance = [[NSString alloc] initWithFormat:@"%@", [contentsList objectAtIndex:indexPath.row]];
    [customTableCell.labelEcheance setText:rowLabelEcheance];

    NSString *rowLabelCapitalRestantDu = [[NSString alloc] initWithFormat:@"%@", >>>>>>>  [contentsList2 objectAtIndex:indexPath.row]];
    [customTableCell.labelCapitalRestantDu setText:rowLabelCapitalRestantDu];

    NSString *rowLabelInterets = [[NSString alloc] initWithFormat:@"%@", [contentsList3 objectAtIndex:indexPath.row]];
    [customTableCell.labelInterets setText:rowLabelInterets];

    NSString *rowLabelAmortissement = [[NSString alloc] initWithFormat:@"%@", >[contentsList4 objectAtIndex:indexPath.row]];
    [customTableCell.labelAmortissement setText:rowLabelAmortissement];

    NSString *rowLabelMontant = [[NSString alloc] initWithFormat:@"%@", [contentsList5 objectAtIndex:indexPath.row]];
    [customTableCell.labelMontant setText:rowLabelMontant];

    return cell;
}

Можете ли вы помочь мне?Я трачу 8 часов работы на эту проблему ....

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 августа 2011

Если у кого-то еще есть эта проблема, вы можете скачать рабочий пример проекта здесь: https://github.com/ijoshsmith/CustomCellDemo

В противном случае, вот инструкция:

Есть несколько способов сделать это, о которых я знаю.

Принимая следующие имена и структуру файла

-UITableCellCustomClass.h
-UITableCellCustomClass.m
-UITableCellCustomClass.xib
-UITableViewClass.h 
-UITableViewCustomClass.m
-UITableViewCustomClass.xib 

С помощью Interface Builder для создания настраиваемой ячейки таблицы необходимо сделать следующее:

1.) Создайте пользовательскую ячейку таблицы из NIB (как вы это сделали), которая наследуется от UITableViewCell

2.) Снимите флажок «Владелец файла» в IB для своего пользовательского класса ячейки таблицы и укажите его на классе таблицы, ячейка которого должна отображаться, например, в. измените его на UITableViewCustomClass.

3.) Щелкните ячейку таблицы на экране IB и перейдите в поле с именем UITableViewCell и измените его на наследование от вашего пользовательского класса ячейки таблицы, например. UITableCellCustomClass

4.) Убедитесь, что вы создали все поля и свойства, а также выходы для своих текстовых полей и установили необходимые соединения в построителе интерфейсов между классом ячейки таблицы и ячейкой в ​​пользовательской ячейке xib (примечание: НЕ является владельцем файла). ...)

5.) Я вижу, что у вас там есть переменная "идентификатор ячейки" ... но на всякий случай, если вы еще этого не сделали, убедитесь, что в вашем CustomTableCell xib вы изменили поле идентификатора ячейки в соответствии с вашим пользовательским идентификатором.

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

Я верю, что это все. Я где-то подробно описал это, потому что это такая боль.

UPDATE:

Если у вас есть пять меток, вам может потребоваться изменить вертикальную высоту строк таблицы, чтобы отображались все метки (если у вас нет действительно широкой таблицы).

Убедитесь, что в таблице указан и делегат, и источник данных, указывающий на родительский класс (тот, в котором размещена логика загрузки ячеек)

Вы должны переопределить эту функцию:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

        return YOURCUSTOMROWHEIGHT;
}

ОБНОВЛЕНИЕ: Очевидно, вышеприведенного недостаточно, поэтому я попробую еще раз:

Попробуйте сделать это, используя следующий метод UINib:

Добавьте это в свой класс UICustomTableView.h

UINib *cellLoader;

Далее попробуйте следующее (при условии, что вы выполнили все шаги, описанные выше) ... может быть, поможет загрузчик UINib? Я почти уверен, что выполнил все необходимые шаги после просмотра моих записей. Одна вещь, которую нужно попробовать, это создать класс, который расширяет UIViewController, затем удалить из него представление, добавить ячейку таблицы и выполнить шаги, описанные выше, и изменить базовый класс для наследования от UITableCellView.

static NSString *CellClassName = @"YourCellClassName";

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) 
    {
        cellLoader = [[UINib nibWithNibName:CellClassName bundle:[NSBundle mainBundle]] retain];
    }
    return self;
}

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Make sure your identifier is set properly in IB
    CustomCellClass *cell = (CustomCellClass *)[tableView     dequeueReusableCellWithIdentifier:CellClassName];
    if (!cell)
    {
        NSArray *topLevelItems = [cellLoader instantiateWithOwner:self options:nil];
        cell = [topLevelItems objectAtIndex:0];
    }
     /* set your cell properties here */



    return cell;
}
0 голосов
/ 11 июля 2012

Используйте этот простой кусок кода:

...
if(cell == nil){
   NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"MyCellView" owner:self options:nil];
   cell = (MyCellView *) [nib objectAtIndex:0];
}
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...