Помещение пользовательского представления в UITableView - PullRequest
8 голосов
/ 30 января 2012

У меня есть UITableView в обычном стиле - тот, который имеет белый фон и серые горизонтальные линии для разделения строк.

У меня есть другой пользовательский UIView, представляющий собой просто прямоугольник 100x100, заполненный красным цветом.

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

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

Как это можно сделать?

Ответы [ 7 ]

12 голосов
/ 02 февраля 2012

Правильное место для обработки порядка размещения вашего красного квадрата в методе layoutSubviews.Табличное представление отправляет себя layoutSubviews каждый раз, когда оно добавляет или удаляет подпредставления (и в другое время).

Вам необходимо создать подкласс UITableView, который имеет ссылку на красный квадрат:

@interface MyTableView : UITableView

@property (weak, readonly) IBOutlet UIView *redSquare;

@end

Вы можете инициализировать redSquare любым удобным для вас способом.Я просто положил его в свое перо вместе с представлением таблицы и переместил, чтобы оно было подпредставлением представления таблицы в awakeFromNib:

@implementation MyTableView

@synthesize redSquare = _redSquare;

- (void)awakeFromNib {
    [self addSubview:self.redSquare];
}

В любом случае, чтобы фактически убедиться, что красный квадрат всегда включенВверху ячеек таблицы и линий сетки переопределите layoutSubviews, например:

- (void)layoutSubviews {
    [super layoutSubviews];
    [self bringSubviewToFront:self.redSquare];
}
6 голосов
/ 02 февраля 2012

РЕДАКТИРОВАТЬ

Если вы пытаетесь добавить представление над линиями (скрыть линии), попробуйте использовать – bringSubviewToFront:, чтобы переместить его в начало представления таблицы.

[self.tableView bringSubviewToFront:redView];

ELSE

Добавьте представление к self.tableView.tableHeaderView, оно поместит его над представлением таблицы и прокручивает с представлением таблицы.

UIView *redView = [[UIView alloc]init];
  redView.frame = //set the frame 
  redView.backgroundColor = [UIColor redColor];
  self.tableView.tableHeaderView = redView;

Удачи

1 голос
/ 30 января 2012

Просто добавьте это представление в UITableView как подпредставление:

[tableView addSubview:myRedView];

См. userInteractionEnabled свойство для обработки взаимодействия и прокрутки.

0 голосов
/ 02 февраля 2012

Отредактируйте ваш viewWillAppear делегат с этими строками

UIView *redView=[[UIView alloc]initWithFrame:CGRectMake(30,30, 100, 100)];
redView.backgroundColor=[UIColor redColor];
[self.tableView addSubview:redView];
0 голосов
/ 02 февраля 2012

Итак, ваша проблема в основном в том, что UITableViewCells UITableView добавляются как подпредставления динамически, и вы не можете контролировать, добавляются ли они перед вашим представлением или позади него.

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

Я бы посоветовал вам попытаться добавить свой пользовательский вид в качестве подпредставления, а затем переопределить -scrollViewDidScroll, например, так:

- (void)scrollViewDidScroll {
    [super scrollViewDidScroll];
    // myCustomView is your custom view referenced in an IVar
    [self.tableView bringSubviewToFront:myCustomView];
}
0 голосов
/ 30 января 2012

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

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

0 голосов
/ 30 января 2012

Сделайте ваш просмотр подпредставлением любого обычного подпредставления UITableView: заголовок, нижний колонтитул или любой UITableViewCell.

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