2010-04-08 2 views
1

Я пытаюсь использовать пользовательский UITableViewCell, и я поместил его в тот же файл nib, что и контроллер UITableView. Для этого файлы: NTItems.h, NTItems.m и NTItems.xib.Пользовательская ячейка просто не работает

я определил ячейку в заголовочном файле:

IBOutlet UITableViewCell *cellview; 

и я правильно применил свойство: неатомической, сохранить, так что там:

@property (nonatomic, retain) IBOutlet UITableViewCell *cellview; 

В файле м - I 've синтезировал переменное устройство и использую это для получения пользовательской ячейки:

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

    static NSString *CellIdentifier = @"cellview"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
    cell = self.cellview; 
    } 

    Product *aProduct = [appDelegate.products objectAtIndex:indexPath.row]; 

    name.text = aProduct.name; 
    upc.text = [NSString stringWithFormat:@"UPC%@",aProduct.upc]; 
    price.text = aProduct.pid; 
    return cell; 
} 

Однако, когда я загрузить таблицу, я получаю этот ужасный беспорядок:

alt text http://dl.dropbox.com/u/1545603/tablecellissue.png

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

+1

Если бы вы могли предоставить более контекстный код, который был бы замечательным. –

+0

Да, добавлено больше :) – bear

ответ

1

Вы не можете повторно использовать одну ячейку из розетки, как это. Подумайте об этом: вы возвращаете одну и ту же ячейку для каждого звонка до tableView:cellForRowAtIndexPath:. Это ваша задача, чтобы попросить tableView вывести из ячейки ячейку, если это возможно, и создать новый каждый раз, когда это не так.

Вместо этого сохраните свою пользовательскую ячейку в отдельном наконечнике и прочитайте этот символ в коде if (cell == nil) { }, когда сбой в обращении.

Файл nib, содержащий пользовательскую ячейку, должен иметь NSObject владельца файла и должен содержать только кеп ячейки (никаких других объектов).

Я использую эту функцию, чтобы загрузить перо:

- (id)loadObjectFromNibNamed: (NSString *)inName; 
{ 
    id objectsInNib = [[NSBundle mainBundle] loadNibNamed: inName 
                owner: self 
                options: nil]; 
    NSAssert1(objectsInNib != nil, @"loadNibNamed %@ returned nil", inName); 
    NSAssert2([objectsInNib count] == 1, @"lodNibNamed %@ returned %d items", inName, [objectsInNib count]); 
    return [objectsInNib objectAtIndex: 0]; 
    } 

Тогда в моем tableView:cellForRowAtIndexPath: у меня есть:

if (cell == nil) { 
    cell = [self loadObjectFromNibNamed: nibName]; 
} 

(я использую то же острие имя, как мой мобильного идентификатор повторного использования.)

1

Что происходит, так это то, что вы используете только одну ячейку для всей таблицы. Это означает, что последняя выделенная ячейка является единственной видимой. Предварительных ячеек по существу не существует.

Вы хотите ознакомиться с этим document о том, как создавать пользовательские ячейки таблицы таблиц из NIB.

Есть пошаговые инструкции.

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