Как изменить внешний вид "пустых" ячеек в обычном UITableView?
Автор вопроса: Bart JacobsОтветов: 8
Если у вас простой (не сгруппированный) UITableView с одной строкой, остальная часть экрана заполняется пустыми или пустыми ячейками. Как изменить внешний вид этих пустых ячеек? Во-первых, я думал, что они будут иметь вид ячейки, используемой в табличном представлении, но похоже, что это не так.
Люди из Cultured Code (Things) хорошо поработали, изменив эти клетки, но я не могу сразу придумать способ изменить их внешний вид.
Какие-нибудь советы?
Bump есть решение, которое работает? Пожалуйста, поделитесь здесь. Спасибо lostInTransit 22.06.2009
Что я сделал до сих пор, так это добавил "невидимую" ячейку в конце представления таблицы с представлением изображения, которое отображает тень конца представления таблицы. Я установил для стиля разделителя значение "Нет". Это создает аналогичный эффект, но мне придется немного подправить его, чтобы он остался доволен. Bart Jacobs 22.06.2009
Хотя это не совсем то, что вы ищете, вы также можете изменить его, чтобы просто отображать пустую область (вместо пустых ячеек), установив представление нижнего колонтитула в таблице. UIView высоты 0 сделает свое дело.
Ответ 2 · рейтинг 8 · memmons
На основе ответа samvermette, но измененного для использования фонового изображения напрямую, а не для компоновки изображения из подкласса UITableViewCell. Ответ Сэма хорош, но он будет менее эффективным, чем просто создание фонового изображения напрямую.
Создайте подкласс UIView - в этом примере я назвал его CustomTiledView - и добавьте в класс следующий код:
Добавьте следующий код в свой tableviewcontroller:
- (CGFloat)tableView:(UITableView *)tableView
heightForFooterInSection:(NSInteger)section {
// this can be any size, but it should be 1) multiple of the
// background image height so the last empty cell drawn
// is not cut off, 2) tall enough that footer cells
// cover the entire tableview height when the tableview
// is empty, 3) tall enough that pulling up on an empty
// tableview does not reveal the background.
return BACKGROUND_IMAGE_HEIGHT * 9; // create 9 empty cells
}
- (UIView *)tableView:(UITableView *)tableView
viewForFooterInSection:(NSInteger)section {
CustomTiledView *footerView = [[CustomTiledView alloc] init];
return [footerView autorelease];
}
Наконец, вам нужно установить нижнюю вставку содержимого вашего tableview на отрицательное значение, возвращаемое из -tableView:heightForFooterInsection:. В этом примере это будет -1*BACKGROUND_IMAGE_HEIGHT*9. Вы можете установить нижнюю вставку содержимого либо из Инспектора размера Интерфейса Builder, либо путем установки свойства self.tableView.contentInset из tableviewcontroller.
Ваше здоровье!
Ответ 3 · рейтинг 5 · samvermette
Я установил подкласс UIView высотой ~ 300 пикселей для своих представлений заголовка и нижнего колонтитула tableView, настроив вставки tableView, чтобы они компенсировали эти представления (установите верхние и нижние вставки на -300 пикселей).
Мой подкласс UIView реализует метод drawRect, в котором я использую CGContextDrawTiledImage() для многократного рисования пустого UITableViewCell:
В моем случае мои ячейки tableview имеют высоту 46 пикселей, поэтому, если я хочу, чтобы подкласс UIView содержал 8 из этих пустых ячеек, мне нужно сделать его высотой 368 пикселей.
Сложный способ, если вам нужны разделительные линии, состоит в том, чтобы определить, что таблица не имеет разделительных линий, и создать линии разделителей ячеек как часть настраиваемого UITableViewCell. Нижняя часть ячейки, очевидно, и, скорее всего, с использованием очень тонкого графического изображения. Не забудьте правильно определить автоматический размер и режим изображения.
Другой способ - определить пустой tableFooterView UITableView:
Если вы просто хотите изменить высоту "пустых ячеек", когда в вашем TableView вообще нет ячеек: вам необходимо установить свойство rowHeight вашего UITableView (реализация tableView:heightForRowAtIndexPath: не влияет на пустые TableViews). Если в вашем TableView есть ячейки и вы реализовали tableView:heightForRowAtIndexPath:, тогда для пустых ячеек будет использоваться последняя высота строки.
Ответ 6 · Daniel
Возможно, вам придется создать собственный подкласс UITableView, который заполняет фон пустыми ячейками.
- (void)drawRect:(CGRect)rect {
[super drawRect: rect];
// draw your background here if the rect intersects with the background area
}
Ответ 7 · MoFlo
Я считаю, что подход с использованием метода UITableViewtableView:viewForFooterInSection: не будет работать в случае, когда таблица пуста, то есть без ячеек. В этом случае вы можете использовать предложенную технику Answerbot, которая может быть перепрофилирована, чтобы явно вставить созданный UIView в нижний колонтитул таблицы, вроде следующего: