2010-08-06 3 views
0

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

(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; 
} 
+0

вы можете потерять 'static' ключевое слово. но работает ли он? потому что это выглядит нормально. – mvds

+0

Да, это работает. Но это происходит, когда я хочу деактивировать ячейки или создавать новые. –

ответ

0

Если вы создали эти пользовательские ячейки в том же файле NIB в качестве контроллера, то я нахожу, что проще всего сделать, это создать ссылку на них (объявите их) и создайте для них выход. Вы не хотите деактивировать ячейки или создавать новые, поскольку у вас есть один и только один экземпляр вашей пользовательской ячейки. (Если вам нужно больше экземпляров вашей настраиваемой ячейки, тогда вам нужно создать их в отдельном файле 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. 
} 
+0

Да, но я не использую файл NIB. Я программировал, без IB. –

+0

Такая же идея имеет место, вы должны иметь ссылку на ячейки. Механизм очереди - это когда вы используете много одинаковых типов ячеек, чтобы система могла решить, следует ли их повторно использовать или воссоздавать. – joelm

1

Этот код является неправильным:

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

Потребность:

partnersCell.partner = [shop.partners objectAtIndex:indexPath.row]; 
+0

Да, я забыл. –

Смежные вопросы