2009-08-16 2 views
1

Немного информации о фоновой информации:Таблица без прокруткиViewHeader

У меня есть UIViewController, который содержит UITableView. В методе loadView (после инициализации таблицы) я установил представление UIViewControllers в представление таблицы с помощью: self.view = tableView;

Что я хочу - это вид в верхней части экрана (перед UITableView), который не прокручивается вместе с остальной частью таблицы при прокрутке. Я попытался добавить мой UIView в tableViewHeader таблицы table, который отображается правильно, но прокручивает остальную часть таблицы.

Есть ли какие-либо легкие исправления для этого? В любом случае, любые подсказки к решению очень приветствуются.

EDIT:

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

ответ

0

Есть ли причина, по которой вы устанавливаете представление UIViewController в соответствии с UITableView? Почему не обрабатывать UITableView как подвью? Это позволит вам добавить все, что вы захотите, над UITableView - другим видом, пустым пространством с видом UIViewController в качестве фона и т. Д.

+0

Что вы предлагаете? Я попытался добавить UIView и UITableView в UIViewController, сказав: [self.view addSubview: headerView]; и [self.view addSubview: tableView]; Каждый вид инициализирован соответствующим фреймом. Когда я это делаю, программа вылетает, и отладчик запускает отображение: Загрузка 95186 кадров стека ... – Erik

+0

Хм, нашел ошибку. Я попробовал ваш подход раньше, и, как я уже сказал, все это разбилось. Это потому, что я забыл поставить [super loadView]; в моем методе loadView. Поэтому я дам вам правильный ответ на это, потому что ваш подход - это то, что я в конечном итоге использую в конце. – Erik

1

Как уже указывалось в kmit, вы можете легко добавить несколько подзонов к Ваше мнение. Итак, не устанавливайте представление таблицы непосредственно как self.view, а скорее создайте пустой UIView (как контейнер) и добавьте представление таблицы, а также представление заголовка в виде подзадач к этому представлению. Вы можете управлять экстентами представлений через их атрибуты фрейма. Простой пример:

- (void)loadView { 
    UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; 
    [view setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth]; 

    // header view 
    HeaderView* headerView = [[HeaderView alloc] initWithFrame:CGRectMake(0, 0, 320, 182)]; 
    self.headerView = headerView; // in case you need the reference later on 
    [view addSubview:headerView]; 
    [headerView release]; 

    // table view 
    UITableView* tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 182, 320, 186) style:UITableViewStylePlain]; 
    [tableView setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth]; 
    tableView.delegate = self; 
    tableView.dataSource = self; 
    [view addSubview:tableView]; 
    self.tableView = tableView; 
    [tableView release]; 

    self.view = view; 
    [view release]; 
} 

В качестве альтернативы созданию вмещающего UIView вручную, вы можете вызвать [super loadView] в начале вашего loadView реализации.

Смежные вопросы