iPhone - Исправлено (tableHeaderView) с сгруппированным UITableView при прокрутке ячеек - PullRequest
3 голосов
/ 06 марта 2011

У меня есть UIView с сгруппированными UITableView, и я бы хотел, чтобы UIView оставался фиксированным tableHeaderView, а не двигался при прокрутке UITableViewCell.Поэтому я бы хотел, чтобы при прокрутке ячейки находились за UIView.

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

Interface.h:

@interface MyAccountVC : UIViewController <UITableViewDelegate, UITableViewDataSource> {
    HeaderView *myHeaderView; // Inherits from UIView
    UITableView *tv;
}

@property (nonatomic, retain) IBOutlet UITableView *tv;
@property (nonatomic, retain) HeaderView myHeaderView;

Practice.m (в viewDidLoad):

// Set up the table's header view based on our UIView 'HeaderView' outlet.
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:nil options:nil];

for (id currentObject in topLevelObjects) {
    if ([currentObject isKindOfClass:[UIView class]]) {
        self.myHeaderView = (HeaderView *)currentObject;
        break;
    }
}

CGRect newFrame = CGRectMake(0.0, 0.0, self.tv.bounds.size.width, self.myHeaderView.frame.size.height);
self.myHeaderView.frame = newFrame;

self.tv.tableHeaderView = self.myHeaderView;

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

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

Ответы [ 3 ]

7 голосов
/ 10 марта 2011

Просто уточняю ответ Парамасивана.

Я не создаю представления с помощью nib-файлов, поэтому я опишу код, предполагая, что вы создаете представления программно.

То, что вам нужно сделать, это просто разместить заголовок сверху и поместить размер таблицы внизу сверху.

Пример:

- (void) loadView {
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,480)];
    self.view = view;

    self.myHeaderView = ... // use your init function, with rect something like (0,0,320,50)
    [view addsubview:self.myHeaderView];

    self.tv = [[UITableView alloc] init... // with frame like (0,50,320,430)
    [view addSubview:self.tv];

    // release everything
}

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

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

В вашем примере, используя nib, вы, вероятно, можете изменить размер фрейма в функции "viewDidLoad", чтобы UITableView начинался с позиции (0, myHeaderView.frame.size.height).

РЕДАКТИРОВАТЬ * наконец понял, как использовать 4 пробела для форматирования кода:)

2 голосов
/ 01 января 2012

Вы можете создать собственный UIViewController и самостоятельно реализовать протоколы UITableViewDelegate и UITableViewDataSource.

Добавьте UITableView к своему UIViewController, а затем добавьте свой пользовательский UIView поверхUITableView просто вызывая метод -addSubview:(UIView *)view.Установите содержимое UITableView и свойства вставки прокрутки.

Пример:

[tableView setContentInset:UIEdgeInsetsMake(44.0f, 0.0f, 0.0f, 0.0f)];
[tableView setContentOffset:CGPointMake(0.0f, 44.0f)];
[[self view] addSubview:tableView];

UIView *viewAboveTableView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 44.0f)];
[[self view] addSubview:viewAboveTableView];

Вы также можете использовать UIImageView под UIView, который находится над UITableView и имеет изображениекоторый начинается прозрачным и постепенно превращается в цвет UIView.Это создало бы впечатление, что ячейки идут за UIView.

. Это было бы легче сделать в коде, чем в Интерфейсном Разработчике.По моему опыту, добавление объектов UIView поверх других представлений сбивает с толку Interface Builder, особенно если это UITableView.По некоторым причинам это также значительно замедляет Интерфейсный Разработчик.

0 голосов
/ 06 марта 2011

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

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