Проблема с cellForRowAtIndexPath и NSBundle mainBundle - PullRequest
0 голосов
/ 22 января 2011

есть идеи, чтобы решить эту проблему?

Это правильный и неправильный путь соответственно:
alt text alt text

Это рабочий код:

- (UITableViewCell *)[...] cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    @try {
        newsRow = ((NewsRowController *)[tableView dequeueReusableCellWithIdentifier:@"cell"]);
        if (newsRow == nil) {
            if ( [[Device GetModel] isEqualToString:@"iPad Simulator"] || 
                 [[Device GetModel] isEqualToString:@"iPad"])
                [[NSBundle mainBundle] loadNibNamed:@"NewsRow_ipad" owner:self options:nil];
            else [[NSBundle mainBundle] loadNibNamed:@"NewsRow" owner:self options:nil];

            if ([tableArray count] > 0)
                [newsRow setData:[tableArray objectAtIndex:indexPath.row]];
        }       
    }
    @catch (NSException * e) {
        NSLog(@"a!!!!!");
    }
    return newsRow;
}

... но поскольку в моем устройстве 3g медленно , когда я прокручиваю таблицу вверх / вниз , я изменил код таким образом, вставив проверку устройства в viewDidLoad и передав его cellForRowAtIndexPath

NSArray *cRow;
@property (nonatomic, retain) NSArray *cRow;
[...]
@syntetize cRow;

- (void)viewDidLoad {
[...]
    if ( [[Device GetModel] isEqualToString:@"iPad Simulator"] 
        || 
        [[Device GetModel] isEqualToString:@"iPad"])
        cRow  = [[[NSBundle mainBundle] loadNibNamed:@"NewsRow_ipad" owner:self options:nil] retain];
        else cRow = [[[NSBundle mainBundle] loadNibNamed:@"NewsRow" owner:self options:nil] retain];
[...]
}

- (UITableViewCell *)[...] cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    @try {
        newsRow = ((NewsRowController *)[tableView dequeueReusableCellWithIdentifier:@"cell"]);
        if (newsRow == nil) {

            //
            // ADDED CODE.
            //
            newsRow = [cRow objectAtIndex:0];    
            //

            if ([tableArray count] > 0)
                [newsRow setData:[tableArray objectAtIndex:indexPath.row]];
        }       
    }
    @catch (NSException * e) {
        NSLog(@"a!!!!!");
    }
    return newsRow;
}

Теперь таблица покажет мне только строку. Если я прокручиваю, строка меняется, но показывает только одну строку ...
alt text
В чем проблема?

Любая помощь?

спасибо,
A

1 Ответ

1 голос
/ 22 января 2011

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

Если вызов GetModel замедляет работу, вы можете вызвать это в viewDidLoadи сохраните его для дальнейшего использования.

Скорее всего, ваша таблица не прокручивается плавно из-за количества представлений, которые вы рисуете в каждой ячейке.Если ваш фон всегда будет сплошным цветом, вы должны убедиться, что все виды, которые вы добавляете в ячейку или непрозрачные.Если вам нужно изображение или градиентный фон, вы должны посмотреть на рисунок ячейки в одном виде.У Apple есть хороший пример того, как это сделать здесь: TableViewSuite .Специально оформить файл TimeZoneView.

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