Выровненный по левому и правому краю текст в ячейке UITableView, разрывается при прокрутке таблицы - PullRequest
4 голосов
/ 06 августа 2011

Моя цель - отобразить 2 строки в одной ячейке, одна из которых выровнена по левому краю, а другая по правому.Код, который я прикрепил, делает именно это в табличном представлении, однако он прерывается при прокрутке вверх / вниз.Мне нужно это для работы в таблице, которая может прокручивать.Кто-то упоминал об использовании CustomUITableViewCells вместо моего текущего метода, может кто-нибудь указать мне на пример этого?

// Customize the appearance of table view cells.
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        static NSString *CellIdentifier = @"Cell";

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];

            UILabel *rank = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, 100, 20];
            [rank setTag:5];
            [cell.contentView addSubview:rank];
            [rank release];

            UILabel *item = [[UILabel alloc] initWithFrame:CGRectMake(110, 5, 220, 20];
            [item setTextAlignment:UITextAlignmentRight];
            [item setTag:6];
            [cell.contentView addSubview:item];
            [item release];
        }

        UILabel *rank = (UILabel *)[cell viewWithTag:5];
        UILabel *item = (UILabel *)[cell viewWithTag:6];

        rank.text = @"leftside";
        item.text = @"rightside";
    }

Any ideas and thoughts greatly appricated, thanks for lookin

Ответы [ 3 ]

2 голосов
/ 06 августа 2011

Эта проблема из-за dequeueReusableCellWithIdentifier.Во время повторного использования ячейки и прокрутки вверх и вниз это вызовет серьезные проблемы, так как метки добавляются в виде подпредставлений к ячейкам и они не имеют свойств ячейки. Однако,если вы используете cell.textLabel в качестве своей метки, это не вызовет проблем, подобных той, с которой вы столкнулись сейчас, но вы не можете добавить более одной метки.

У вас есть два решения для этого.

  1. В вашем случае вам нужно прекратить использовать один и тот же cellIdentifier для каждой и использовать разные идентификаторы для каждой ячейки, чтобы они не использовались повторно.Это было бы полезно, если в tableView имеется очень небольшое количество строк, или это окажется неэффективным.

  2. Лучшим решением будет подкласс UITableViewCell и добавьте эти две метки в его код, а затем используйте этот UITableViewCell с dequeueReusableCellWithIdentifier.Это всего лишь небольшой объем работы, и вы можете повторно использовать ячейки.Это было бы очень полезно, если у вас есть большое количество строк в табличном представлении.

    Просмотрите ЭТО ОБУЧЕНИЕ , чтобы узнать, как создать подкласс UITableViewCell с 2 метками.

    Вам нужно будет поработать с методом - (void)layoutSubviews и добавить эти метки в свой пользовательский подкласс UITableViewCell.

И не забывайте ссылаться на это customUITableViewCellвместо uitableviewcell по умолчанию при загрузке tableView.Ваш UILabels больше не будет испорчен.

Другая ссылка .

0 голосов
/ 06 августа 2011

Ну, я вставил тот же код, который вы опубликовали, и я получил 2 ошибки компилятора, в которых упоминается ) отсутствует при выделении UILable, и, как я уже выяснил, он скомпилирован и успешно запущен .

Единственное исключение и сбой, с которыми я столкнулся, и это произошло из-за метода источника данных, не возвращает ни одной ячейки. И это также отсутствует в данном коде.

Кроме того, код отлично работает на моем конце и не имеет ни одного сбоя, хотя я прокручивал много раз.

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

0 голосов
/ 06 августа 2011

Я бы использовал пользовательский UITableViewCell. Самый простой способ - просто загрузить пример проекта, скопировать и вставить, чтобы увидеть, как вы настраиваете пользовательскую ячейку. Это хороший учебник с примером проекта. Вы можете использовать if (indexPath.row == int) в методе cellForRowAtIndexPath, чтобы определить, какие ячейки должны быть стандартными, а какие - вашей пользовательской ячейкой.

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