установка ImageView в качестве фона для секций в сгруппированном uitableview - PullRequest
1 голос
/ 10 марта 2012

есть ли какой-нибудь возможный способ установить UIImageView в качестве фона для раздела (скажем, раздела # 3) в сгруппированном UITableView?Я не спрашиваю о viewForHeaderInSection, потому что я попробовал это, но не сработало, как ожидалось.заранее большое спасибо ...

Ответы [ 4 ]

2 голосов
/ 10 марта 2012

Я предполагаю, что если бы вы мыслили очень креативно, вы могли бы придумать способ существенно поменять свойство backgroundView в UITableView, поскольку видны разные разделы.Это не кажется мне особенно элегантным, учитывая, что несколько разделов могут занимать видимый экран одновременно, но, возможно, я не совсем ясно понимаю вопрос.

Короткий ответ: нет определенного /простой способ добиться этого.Композиция раздела далека от фона UITableView, и, по сути, архитектура не настроена на то, что вы хотите.Я не предполагал бы знать детали вашей реализации, но я также призываю к осторожности: визуальные и архитектурные характеристики UITableView довольно хорошо продуманы.Мое личное мнение (опять же, я не видел, над чем вы работаете), это то, что различные фоновые разделы могут во многих случаях перегружать пользовательский интерфейс.Я также могу видеть случаи, когда это может быть хорошим прикосновением к пользовательскому интерфейсу при правильном выполнении.

В этом случае, если вы все еще хотите это сделать, вот подход, который я бы выбрал:

По сути, вы будете наблюдать за положением ячеек своего табличного представления.Вы можете сделать это в ячейке scrollViewDidScroll или tableViewWillDisplay - или в других местах, я уверен.Но вам нужно знать, какие ячейки прокручиваются на экране и за его пределами, и затем вам нужно будет спросить у самой верхней видимой ячейки, что это за раздел.После того, как вы определили, какой именно раздел вы должны отображать в данный момент, вы можете использовать его для прокрутки собственного набора представлений, представляющих фон каждого раздела.

По сути, вы собираетесь создать каждый динамический раздел.Фоновые представления в коде, только UIView, каждый со своим backgroundProperty, установленным на повторяющийся шаблон (очевидно, высоты будут динамическими).Добавьте все свои подпредставления фона раздела (или, предпочтительно, сделайте это лениво) в backgroundView вашего UITableView.

Теперь, когда прокручивается представление прокрутки, вы будете наблюдать, какие строки и разделы входят и выходят из представления таблицы.Поскольку строки в разделах прокручиваются, вычислите высоту фона раздела (умножьте количество строк в разделе на их высоту) и отрегулируйте его ось Y, которая расположена, но обрезана backgroundView вашего tableView.По мере прокрутки разделов вы будете обновлять смещение по оси Y для фона соответствующего раздела.Фу!

Другая идея может состоять в том, чтобы бросить все фоновые представления вашего раздела, расположенные вертикально, в UIScrollView, взаимодействие с пользователем отключено.Поместите это представление прокрутки в backgroundView вашего табличного представления, а затем разберитесь с математикой, чтобы по существу «переслать» события прокрутки из представления прокрутки в табличном представлении в ваше представление прокрутки в фоновом режиме.

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

0 голосов
/ 12 марта 2012

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

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

0 голосов
/ 10 марта 2012

создайте собственный headerView, который будет выглядеть примерно так:

.h

@interface CustomViewForHeader: UIView
@end

.m

#import "CustomViewForHeader.h"
@implementation CustomViewForHeader

-(id)initWithFrame:(CGRect)frame {
   self = [super initWithFrame:frame];

if (self != nil) {
    UIImageView *bgImage = [[UIImageView alloc]initWithFrame:self.frame];
    bgImage.image = [UIImage imageNamed:@"bill_headerBg.png"];
    [self addSubview:bgImage];
}
return self;
}
@end

используйте это как:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 50.0;
}

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section {
   CustomViewForHeader *customView = [[CustomView alloc]initWithFrame:CGRectMake(0,0,320,50)]
    return customView;
}
0 голосов
/ 10 марта 2012

Используйте myTable.tableHeaderView = customHeaderView, если в вашей таблице только один раздел.

viewForHeaderInSection может не сработать, если вы не вернули объект типа UIView или подкласс в своем методе. Добавьте некоторый код из вашего viewForHeaderInSection метода к вашему вопросу для более точного ответа.

EDIT- Если под viewForHeaderInSection didn't work as expected вы подразумеваете, что заголовок был обрезан, то это может быть потому, что вы не реализовали следующий метод:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

Если не реализовано, высота каждой секции устанавливается равной iOS значению по умолчанию.

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