iOS Как добавить STATIC UITableView и другое представление в тот же контроллер представления - PullRequest
5 голосов
/ 06 января 2012

Когда я создаю статическое табличное представление и помещаю его в контроллер обычного представления, я получаю ошибку, которая говорит, что статические табличные представления должны быть в UITableViewController's.

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

Есть ли способ использовать UITableViewController и сделать так, чтобы tableView не был полноэкранным, чтобы я мог добавить к нему подпредставление в раскадровке?

Если нет,это может быть сделано в коде?

Любые советы будут оценены!

Ответы [ 5 ]

6 голосов
/ 05 сентября 2012

То, что вам нужно, это обычный UITableViewController (чтобы вы получили все статическое поведение ячейки), а затем ваше представление как подпредставление табличного представления, но управляемое так, что оно всегда прилипает к нижней части экрана. Apple продемонстрировала это как WWDC. Вот что я делаю (в моем примере у меня есть UIDatePicker, который я всегда хочу закрепить внизу):

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

[self.tableView addSubview:self.datePicker];
[self updateDatePickerBounds];

Реализуйте scrollViewDidScroll, чтобы вы могли переместить свое представление в нижнюю часть экрана при каждом прокрутке представления таблицы:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    // Keep the date picker floating above the table view, anchored to the bottom of the view
    [self updateDatePickerBounds];
}

А затем реализуйте функцию, которая правильно позиционирует ваш взгляд:

- (void) updateDatePickerBounds
{
    // Keep the date picker floating above the table view, anchored at the bottom
    CGRect tableBounds = self.tableView.bounds;
    CGRect pickerFrame = self.datePicker.frame;
    pickerFrame = CGRectMake(tableBounds.origin.x,
                             tableBounds.origin.y + CGRectGetHeight(tableBounds) - CGRectGetHeight(pickerFrame),
                             tableBounds.size.width,
                             pickerFrame.size.height);
    self.datePicker.frame = pickerFrame;
}

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

Я также вызываю свой метод updateDatePickerBounds из viewWillAppear. Я забыл, почему я должен был это сделать.

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

Я не уверен, что это работает, но вы можете попробовать этот подход тоже:

  1. Создайте UIViewController, например, BaseViewController (как класс, так и в раскадровке)
  2. Создайте UITableViewController, например, MyStaticTableViewController (только в раскадровке и добавьте к нему идентификатор)
  3. В раскадровке добавьте экземпляр UIView с соответствующими размерами в BaseViewcontroller, например, myStaticTableView.
  4. Программно добавьте представление MyStaticTableViewController в myStaticTableView.
1 голос
/ 07 января 2012

Статические ячейки TableViews должны иметь тип UITableViewController, но вы можете добиться того же эффекта, используя ViewController с TableView (или 2) и самостоятельно позаботиться о методе cellForRowAtIndexPath для телевизора, которым вы хотите быть «Статическая ячейка». Просто переключите IndexPath.section и .row и создайте ячейку так, как вы этого хотите. Конечно, больше кодирования, но вы получите тот же эффект и большую гибкость, если не хотите делать это способом статической ячейки Apple.

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

Вы можете добиться того же эффекта, используя UITableViewController и статический UITableView. Создайте нужное представление внизу таблицы и установите для свойства tableFooterView значение UITableView, которое будет этим представлением. Это можно сделать, перетащив объект UIView из библиотеки и добавив его в нижнюю часть представления таблицы (вы заметите выделение нижней области синим цветом, чтобы убедиться, что вы делаете это правильно). Возможно, вам придется настроить вставки содержимого, чтобы они отображались так, как вы хотите.

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

Реальный ответ - создать пользовательский контроллер контейнера.

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

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