iOS: добавьте UIView в UITableView - PullRequest
       7

iOS: добавьте UIView в UITableView

1 голос
/ 13 февраля 2012

Я пытаюсь добавить UIView поверх UITableView, чтобы имитировать меню стиля iPhone в Facebook. У меня это работает нормально, сделав контроллер UIViewController, затем добавив табличное представление, однако я не могу сделать меню статическим меню, если контроллер не является UITableView.

Можно ли добавить представление поверх таблицы и сделать прокрутку таблицы только на заднем плане без прокрутки на переднем плане?

Вот что у меня есть с подклассом UIViewController enter image description here

Но я не могу сделать ячейки табличного представления статическими через IB, поскольку он не является подклассом UITableView Controller.

РЕДАКТИРОВАТЬ в соответствии с NSJones Code: Кажется, все идет в правильном направлении. Однако представление все еще блокирует таблицу. Если я удалю представление из раскадровки, то будет отображаться только таблица. xCode screenshot

iPhone Simulator Screenshot

Ответы [ 4 ]

2 голосов
/ 13 февраля 2012

Вместо того, чтобы добавлять его как подпредставление табличного представления, добавьте его как подпредставление суперпредставления табличного представления;таким образом, он не будет прокручиваться.

Так что вместо этого:

[tableView addSubview:viewController.view];

Сделайте это:

[tableView.superview addSubview:viewController.view];
2 голосов
/ 13 февраля 2012

Вы можете сделать вид зависшим так же, как любой реальный объект;Держите это с чем-то невидимым.

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

Редактировать:

Кажется, что этот хороший чистый подход не будет работать для вастак как вам нужен контроллер вида, чтобы он был UITableViewController.Ответом на этот немного более сложный подход является использование метода делегата для UIScrollView, который также работает для UITableView.У Apple фантастическая демонстрация этой концепции в видео WWDC2011 - Session 125 - UITableView Changes, Tips, Tricks.Если вы можете смотреть это, я очень рекомендую это.Суть этой проблемы начинается примерно с 36:10.

Но чтобы подвести итог, вы реализуете метод делегата scrollViewDidScroll:.И управляйте движением табличного представления, регулируя свойства положения представления.Здесь я сохраняю свойство UIView с именем viewToKeepStill, все еще используя этот метод.

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    // CGFloat stillViewDesiredOriginY; declared ivar
    CGRect tableBounds = self.tableView.bounds; // gets content offset
    CGRect frameForStillView = self.viewToKeepStill.frame; 
    frameForStillView.origin.y = tableBounds.origin.y + stillViewDesiredOriginY; // offsets the rects y origin by the content offset
    self.viewToKeepStill.frame = frameForStillView; // set the frame to the new calculation
}
0 голосов
/ 13 февраля 2012

Если у вас представление UIViewController в качестве представления вашей таблицы, то ваша таблица будет охватывать весь экран, поэтому вы не сможете ничего добавить поверх него.

Почему бы не попробовать следующее:

1) create a new UIViewController
2) add a view on top where you want your menu
3) in the space left under just drag a table view from the component library 
4) don't forget to set the 2 table view delegates to be your view controller class

вот и все?

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

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

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