2016-04-01 5 views
4

В настоящее время я использую UITableViewController (PFQueryTableViewController), я хотел бы отобразить UIView в верхней части TableView.Добавить UIView в верхней части UITableViewController в Swift

В идеале я хотел бы сделать это в раскадровке, поэтому я могу легко добавить к нему дополнительные ярлыки/кнопки. Тем не менее, я не могу понять, как или если вы можете сделать это в раскадровке. Это правильно?

Я пробовал это программно. Я первым создал переменную в верхней части:

var filterLabelView:UIView = UIView()

Затем я добавил следующее в ViewDidLoad:

filterLabelView.frame = CGRect(x: self.view.frame.width/2, y: self.view.frame.height/2, width: self.view.frame.width, height: 40) 
filterLabelView.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2) 
filterLabelView.backgroundColor = UIColor.redColor() 
self.view.addSubview(filterLabelView) // See below 

Я также попытался:

self.view.insertSubview(filterLabelView, aboveSubview: tableView) 

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

То, что я хочу, чтобы создать

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

enter image description here

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

Может ли кто-нибудь помочь мне создать этот вид? Заранее спасибо

ответ

4

Вы должны получить от UIViewController, чтобы получить полный контроль над макетами.

Затем просто добавьте экземпляр UITableView в раскадровки. Ограничьте его, как правило, с помощью краев, с верхним смывом и установите customView.top = tableView.bottom. Сделайте нормальный выход на контроллер.

Вам просто нужно помнить, чтобы сделать свой обычай UIViewController принять обычные DataSource и делегировать протоколы, а также назначая себя эти роли в свойствах UITableView на инициализации (обычно viewDidLoad()).

Там еще одна тонкости связанно с очисткой выбранной ячейки, когда на viewDidAppear(), но там нет ничего другого, особенного в UITableViewController - это просто UIViewController с встроенным tableView собственности и автоматически назначенными делегатами и очень негибким макетом.

ADDENDUM на основе комментариев о том, как обойти это: Это похоже на вопрос, есть ли способ сделать отвертку приводом гвоздя в лес. Просто используйте нужный инструмент. Верхним уровнем view объекта UITableViewController является сам по себе UITableView. См. Ниже, запас UITableViewController, ничего больше, нулевой код, в режиме отладки макета.

Это означает, что все дерево представлений встроено в прокрученный объект, поэтому все подпункты будут прокручиваться вместе с ним.

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

ДОПОЛНЕНИЕ 2:

Не зная Разбор интимно, это не может быть возможно. (!! Спасибо, Синтаксическое.) Если Анализировать не предоставляет вам сепарабелъный PFQueryTableView, что вы можете встраивать себя следующее временное решение может быть возможно, но вы должны понимать код Objective-C:

https://www.parse.com/questions/pfquery-tableview-for-uiviewcontroller

enter image description here

+0

Благодарим за отзыв. Я действительно это прочитал. Это единственный способ добиться этого? Мое приложение довольно сильно создано сейчас, и я хотел бы попытаться избежать повторного создания моего главного экрана. Считаете ли вы, что есть другой способ? заранее спасибо – Nick89

+0

@ Nick89 с помощью 'UIViewController' - лучший способ пойти, если только ваш' tableview' имеет только один раздел, тогда вы можете установить 'viewForHeaderInSection' и сделать его« липким ». – kye

+0

@kye Привет, Kye, не могли бы вы показать мне, как добавить это, я еще не добавил его раньше? – Nick89

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