Доступ к компонентам пользовательского представления заголовка - PullRequest
0 голосов
/ 03 февраля 2020

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

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    let customHeaderView = Bundle.main.loadNibNamed("AddHeaderTableViewCell", owner: self, options: nil)?.last as! AddHeaderTableViewCell

customHeaderView.txtFieldAdd.placeholder = ""
return customHeaderView
}

При попытке получить значение из текстовых полей ниже:

 @objc func addMoreToMytask(sender: UIButton!) {

   isAddStep = false

    let header = tblAddedTasks.headerView(forSection: 0) as? AddHeaderTableViewCell
    let sectionTitle = header?.textLabel?.text

    arrAdded.append((header?.txtFieldAdd.text!)!)
    tblAddedTasks.reloadData()
}

В этой строке выдается ошибка

let header = tblAddedTasks.headerView(forSection: 0) as? AddHeaderTableViewCell

Дает предупреждение и cra sh при запуске

Cast from 'UITableViewHeaderFooterView?' to unrelated type 'AddHeaderTableViewCell' always fails

Пожалуйста, руководство для того же.

1 Ответ

1 голос
/ 03 февраля 2020

Вы можете попробовать использовать объект заголовка в качестве члена.

var customHeaderView : AddHeaderTableViewCell = nil
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
  customHeaderView = Bundle.main.loadNibNamed("AddHeaderTableViewCell", owner: self, options: nil)?.last as! AddHeaderTableViewCell
  customHeaderView.txtFieldAdd.placeholder = ""
  return customHeaderView
}

И затем вы можете использовать объект члена;

@objc func addMoreToMytask(sender: UIButton!) {

    isAddStep = false

    // let header = tblAddedTasks.headerView(forSection: 0) as? AddHeaderTableViewCell
    // let sectionTitle = header?.textLabel?.text
    let sectionTitle = customHeaderView.textLabel?.text 

    arrAdded.append((customHeaderView.txtFieldAdd.text!)!)
    tblAddedTasks.reloadData()
}

Я не уверен, но причина может быть необязательной ценность. Tableview предоставляет только вид на экране, вы можете получить ноль. Подпись функции:

func headerView(forSection section: Int) -> UITableViewHeaderFooterView?

Возвращает необязательную переменную. Вы пытаетесь привести необязательную переменную. XCode может не работать идеально при приведении дополнительных переменных, поэтому он не может предупредить вас с достаточным количеством информации.

Вы можете попробовать;

tblAddedTasks.headerView(forSection: 0) as! AddHeaderTableViewCell

или

tblAddedTasks.headerView(forSection: 0)! as?  AddHeaderTableViewCell

Вероятно, вы получите sh, но, по крайней мере, вы увидите реальную причину сбоя.

...