iPhone - Создание пользовательского TableView программно - PullRequest
0 голосов
/ 06 августа 2010

Итак, у меня есть настраиваемые ячейки таблицы, настроенные программно. У меня есть 4 класса пользовательских ячеек, одна ячейка для одного раздела. Но я не знаю, если это неправильно или нет:

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


    static NSString *ShopsIdentifier = @"ShopsIdentifier";
    static NSString *DescriptionsIdentifier = @"DescriptionsIdentifier";
    static NSString *ServicesIdentifier = @"ServicesIdentifier";
    static NSString *PartnersIdentifier = @"PartnersIdentifier";


    if (indexPath.section == kShops) {
        NSLog(@"Chargement cellule ShopDetailCell");
        ShopDetailCell * shopshopCell = (ShopDetailCell *)[tableView dequeueReusableCellWithIdentifier:ShopsIdentifier];
        if (shopCell == nil) {
            shopCell = [[[ShopDetailCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ShopsIdentifier] autorelease];
        }
        shopCell.detailController = self;
        shopCell.shop = self.shop;
        return shopCell;

    }

    if (indexPath.section == kDescriptions) {
        NSLog(@"Chargement cellule DescriptionCell");
        DescriptionCell * descriptionCell = (DescriptionCell *)[tableView dequeueReusableCellWithIdentifier:DescriptionsIdentifier];
        if (descriptionCell == nil) {
            descriptionCell = [[[DescriptionCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:DescriptionsIdentifier] autorelease];
        }
        descriptionCell.shop = self.shop;
        return descriptionCell;

    }
    if (indexPath.section == kServices) {
        NSLog(@"Chargement cellule ServicesCell");
        ServicesCell * servicesCell = (ServicesCell *)[tableView dequeueReusableCellWithIdentifier:ServicesIdentifier];
        if (servicesCell == nil) {
            servicesCell = [[[ServicesCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ServicesIdentifier] autorelease];
        }
        servicesCell.shop = self.shop;
        return servicesCell;
    }

    if (indexPath.section == kPartners) {
        PartnersCell * partnersCell = (PartnersCell *)[tableView dequeueReusableCellWithIdentifier:PartnersIdentifier];
        if (partnersCell == nil) {
            partnersCell = [[[PartnersCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:PartnersIdentifier] autorelease];
        }
        NSMutableDictionary * aPartner = [[NSMutableDictionary alloc] init];
        aPartner = [shop.partners objectAtIndex:indexPath.row];
        partnersCell.partner = aPartner;
        [aPartner release];
        return partnersCell;
    }

    return nil;
}

Ответы [ 2 ]

1 голос
/ 06 августа 2010

Этот код неверен:

NSMutableDictionary * aPartner = [[NSMutableDictionary alloc] init];
aPartner = [shop.partners objectAtIndex:indexPath.row];
partnersCell.partner = aPartner;
[aPartner release];

Требуется:

partnersCell.partner = [shop.partners objectAtIndex:indexPath.row];
0 голосов
/ 06 августа 2010

Если вы создали эти пользовательские ячейки в том же NIB-файле, что и контроллер, то я считаю, что проще всего создать ссылку на них (объявить их) и создать для них выход. Вы не хотите удалять ячейки из очереди или создавать новые, поскольку у вас есть один и только один экземпляр вашей пользовательской ячейки. (Если вам нужно больше экземпляров вашей пользовательской ячейки, вам нужно создать их в отдельном файле пера и использовать механизм очереди.)

в файле .h: UITableViewCell IBOutlet * shopDetailCell;

Тогда в cellForRowAtIndexPath вы можете просто:

UITableView *cell;

if (indexPath.row == kShopCellRow)  {
    cell = self.shopDetailCell;
    cell.shop = self.shop;   // etc. whatever initialization you have to do
    return cell;          // do this at the end of your if statements.
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...