2016-07-19 4 views
2

Ну, я наивный разработчик IOS, использующий быстрый язык.Как добавить HeaderView из nib в UiTableView программно в Swift

У меня есть вид на стол, который отображает список функций отеля. Теперь я хочу добавить информацию заголовка в таблицуView с изображением отеля, название отеля над табличным видом, чтобы информация заголовка также прокручивалась вместе с содержимым таблицы (список функций продукта)

В этом случае TableView со списком функций работает нормально.

class HotelDetailViewController: UIViewController,UITableViewDataSource,UITableViewDelegate { 

    @IBOutlet weak var categoriesTableView: UITableView! 

    var items: [(String, String,String)] = [ 
     ("Service", " Courteous service, Good staff , Good staff"," Bad Facility"), 
     ("Vibe", " Courteous service, Good staff"," Bad Facility"), 
     ("Hotel", " Courteous service, Good staff"," Bad Facility"), 
     ("Room Facility", " Courteous service, Good staff"," Bad Facility"), 
     ("Amenities", " Courteous service, Good staff"," Bad Facility"), 
     ("Food", " Courteous service, Good staff"," Bad Facility") 
    ] 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     let nib = UINib(nibName: "HotelSnippetTableViewCell", bundle: nil) 
     categoriesTableView.separatorStyle = UITableViewCellSeparatorStyle.None 
     categoriesTableView.registerNib(nib, forCellReuseIdentifier: "CustomCell") 
     categoriesTableView.rowHeight = UITableViewAutomaticDimension 
     categoriesTableView.estimatedRowHeight = 100  
    } 



    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let customTableViewCell = tableView.dequeueReusableCellWithIdentifier("CustomCell") as! HotelSnippetTableViewCell 

     let info = items[indexPath.row] 

     customTableViewCell.setCategory(info.0) 

     customTableViewCell.setPositive(info.1) 
     customTableViewCell.setNegative(info.2) 


     return customTableViewCell 

    } 

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

     tableView.deselectRowAtIndexPath(indexPath, animated: true) 
     print("You selected cell #\(indexPath.row)!") 

    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return items.count 
    } 


} 

Для получения информации заголовка, как HotelImage, название отеля и других лейбл я создал перо с набором всех видов и соответствующий класс со всеми ссылками, отображенных на него.

Теперь, как добавить этот UiView в мое табличное представление как заголовок программно (потому что я получаю данные после отдыха).

Я искал, но нашел учебники о том, как установить заголовки секций строки.

Пар вещей я попробовал:

  1. Я обнаружил, что существует функция протокола для TableView

    func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
         //Code} 
    

Но как загрузить мое перо здесь и установить на этот Tableview а также я хочу, чтобы ti запускал это программно только после получения данных из службы

  1. Создать перо с одним из родителей, как TableViewCell, загрузите его с помощью dequeueReusableCellWithIdentifier(), установите данные и установите Tableview

    let headerCell = categoriesTableView.dequeueReusableCellWithIdentifier("HotelDetailHeaderTableViewCell") as! HotelDetailHeaderTableViewCell headerCell.setImageUrl(""); 
    
        headerCell.setHotelZmi(CGFloat(87)) 
    
    
        headerCell.setNameAndPersona("Fort Aguada Goa", persona: "OverAll", reviewsCount: "780") 
    
        headerCell.frame = CGRectMake(0, 0, self.categoriesTableView.bounds.width, 600) 
    
        categoriesTableView.tableHeaderView = headerCell 
    

Но даже это бросает некоторое исключение и я не могу видеть исключение (Как просмотреть журнал ошибок в Xcode?).

Является ли процесс, который я делаю, является правильным? Если не кто-нибудь, пожалуйста, мне предложить эффективный подход

Поскольку в Android я использовал для создания NestedScrollView с линейной планировкой внутри него встроен с любым количеством recyclerViews (удаление свиток для recyclerviews) и RelativeLayout

Пожалуйста, помогите мне.

+0

Вам нужно создайте 'UIView' вместо' UITableViewCell' для headerVIew, хотя в xib – xmhafiz

+0

Как загрузить UIView в моем контроллере? – Manikanta

+0

только что добавил мой ответ – xmhafiz

ответ

6

Вы можете использовать этот код, чтобы инициализировать ваш СИБ файл

let view = (NSBundle.mainBundle().loadNibNamed("MenuHeader", owner: self, options: nil)[0] as? UIView) 
tableView.tableHeaderView = view 

Тогда ваш MenuHeader будет нормальный .xib файл с ячейкой внутри него, только не забудьте настроить ограничения надлежащим образом, чтобы поместиться на всех экранах что ты хочешь.

+0

создали UIBView NIB и сопоставлен с быстрым классом и сопоставил интерфейсы представлений с этими классами, чтобы я мог редактировать значения меток в nib. Используя приведенный выше код, я получаю UiView, как я могу получить доступ к представлениям внутри UiView Nib (например, imageview, метки внутри UIView)? – Manikanta

+0

Если у вас уже есть класс для UIView, вам нужно подключить свой файл nib с этим классом, а затем вы можете использовать «view.label.text», а затем изменить свои значения. Не забудьте сохранить ссылку на это представление или просто создать новый, когда вам нужно изменить информацию заголовка. –

+0

Спасибо, наконец, твоя работа – Manikanta

-1

В вашей viewForHeaderInSection нагрузки на заказ вид с XIB и вернуть его

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 
    // for example you have xib as 'CustomHeaderView.xib' 
    let headerView = CustomView() 
    headerView.myLabel.text = "My Title" 

    return headerView 
} 

Другой метод, задающее высоту заголовок

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
    return 60.0 // put your height here 
} 
+0

Я создал UIB UIView и сопоставлен с быстрым классом и сопоставил интерфейсы представлений с этими классами, чтобы я мог редактировать значения меток в nib. Используя приведенный выше код, я получаю UiView, как я могу получить доступ к представлениям внутри UiView Nib (например, imageview, метки внутри UIView)? – Manikanta

+0

вы можете сослаться на этот http://stackoverflow.com/questions/33935566/custom-uiview-class-swift?answertab=votes#tab-top – xmhafiz

+0

Ссылка рассказывает о создании метки программно, но я хочу получить доступ к представлениям из nib , – Manikanta

2

Обновление для быстрой 4

let view = (Bundle.main.loadNibNamed("TableViewHeader", owner: self, options: nil)![0] as? UIView) 
self.tableview.tableHeaderView = view 
Смежные вопросы