фон uitableviewcell

#iphone #objective-c #uitableview

#iPhone #цель-c #uitableview #objective-c

Вопрос:

У меня есть UITableView (сгруппированный стиль). Я хотел настроить его так, чтобы он выглядел как «Вставить это» или «Опубликовать это» с интерфейсом на желтом фоне.

Следовательно, добавлен следующий код

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

    UIView *backgroundView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
    backgroundView.backgroundColor = [UIColor yellowColor];
    cell.backgroundView = backgroundView;
    cell.textLabel.backgroundColor=[UIColor yellowColor];
} 
  

Это действительно сработало. Мне удалось добиться желтого фона, но разделительная строка отсутствует. Может ли кто-нибудь 1 мне помочь?

Это лучший способ сделать это? Или я должен создать изображение для ячейки и использовать его в качестве фонового изображения?

Комментарии:

1. разделительная строка между ячейками или внутри ячеек..

2. @Jhaliya : между ячейками

Ответ №1:

На самом деле, ни один из приведенных выше ответов не является (я полагаю) правильным. Согласно документу:

Примечание: Если вы хотите изменить цвет фона ячейки (установив цвет фона ячейки с помощью свойства backgroundColor, объявленного UIView), вы должны сделать это в tableView:willDisplayCell:forRowAtIndexPath: методе делегата, а не в tableView:cellForRowAtIndexPath: источнике данных. Изменение цветов фона ячеек в табличном представлении в стиле группы приводит к эффекту в iOS 3.0, отличающемуся от предыдущих версий операционной системы. Теперь это влияет на область внутри закругленного прямоугольника, а не на область за его пределами.

Поэтому вместо того, чтобы вызывать setBackgroundColor in tableView:cellForRowAtIndexPath: , вы должны делать это в tableView:willDisplayCell:forRowAtIndexPath: :

 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
ShoppingList *object = (ShoppingList*)[self.fetchedResultsController objectAtIndexPath:indexPath];

    if ([object isComplete] == YES) {
        [cell setBackgroundColor:[UIColor greenColor]];
    } else {
        [cell setBackgroundColor:[UIColor clearColor]];
    }
}
  

Я обнаружил, что это работает идеально и согласуется с тем, как работает рендеринг остальных ячеек таблицы. Нет необходимости добавлять какие-либо фоновые представления или что-либо еще.

Ответ №2:

Я действительно удивлен, что это сработало для установки цвета фона. Правильный метод настройки фона UITableViewCell — это:

 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.backgroundColor = [UIColor yellowColor];
}
  

Кроме того, я заметил, что у вас нет никакого кода повторного использования в вашем методе cellForRowAtIndexPath. Я надеюсь, что вы просто не вставляли это, но это своего рода большой запрет. Руководство по программированию в виде таблицы

Комментарии:

1. Это всего лишь дубликат моего ответа, но он правильный.

Ответ №3:

Устарел.

Зачем вы создаете пользовательский фоновый вид? Если вы хотите получить только желтый цвет, вы можете настроить свой цвет с помощью UIColor colorWithRed: green: blue: alpha: для создания собственного цвета и просто добавить его в cell setBackgroundColor:UIColor . Кажется, что разделитель полностью перезаписывается, если вы добавляете фоновый вид в сгруппированный табличный вид. Если вы все еще хотите использовать пользовательский UIView в качестве фона, я предлагаю добавить пользовательскую tableViewCell, которая выглядит как ваш разделитель. Вы можете отрегулировать это в cellForRowAtIndexPath .

Рабочий код для моего первого предложения:

 [cell setBackgroundColor:[UIColor yellowColor]];
  

Комментарии:

1. Спасибо. Но когда я использовал, я не вижу никаких изменений в цвете фона

2. итак, если у вас в основном есть только setBackgroundColor и нет пользовательского backgroundview, вы все равно не получите изменения фона? потому что не должно быть ничего, что перезаписывало бы это. вы не против загрузить свой класс в pastebin или что-то еще?

3. На самом деле я добавил фон к представлению.

4. Здорово, что вы это поняли 🙂

5. ваше предложение несовместимо с более ранней версией iphone, которая была жизнеспособной, когда я писал этот ответ — однако версия, которую вы описываете, действительно более правильная

Ответ №4:

Работает ли это для вас, чтобы поместить внутри «cellForRowAtIndexPath»?

 ....................

if (cell == nil) {

....................

    cell.backgroundColor = [UIColor yellowColor];

....................

    tableView.backgroundColor=[UIColor clearColor];

}
  

Комментарии:

1. вы удалили предыдущий с помощью «UIView * backgroundView»?

2. да, я сделал. Но на самом деле я хочу, чтобы только ячейки были желтого цвета. У меня другое фоновое изображение для tableview

Ответ №5:

Установите для стиля разделителя tableview значение UITableViewCellSeparatorStyleSingleLine.

Должно быть что-то вроде приведенного ниже.

 myTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
  

Комментарии:

1. Я попробовал это. Я предполагаю, что backgroundView также покрывает разделительную строку

2. @Narayanan : Как вы определяете высоту каждой ячейки?

3. Я расстроен… зачем нам нужна высота ячейки /?

4. @Narayanan: Если содержимое вашей ячейки варьируется от одной ячейки к другой. вам нужно вычислить высоту ячейки в — (CGFloat)TableView:(UITableView *)TableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

5. @Narayanan : Если значение является постоянным для всей ячейки, тогда задайте значение свойству RowHeight для UITableView. как показано ниже, MyTableView.RowHeight = 45.0f;