#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;