У меня есть UITableView, где представление заголовка раздела содержит UITextField, который пользователь может вводить значения. Когда я хочу сохранить значение, введенное пользователем, мне нужно получить доступ к заголовку раздела таблицы.
Я попытался использовать метод headerView(forSection:)
, и я поставил headerView(forSection: 0)!
в качестве теста, чтобы убедиться, что заголовок раздела определенно существует, но каждый раз, когда я запускаю программу, строка, где метод возвращает ошибку " неожиданно обнаружен nil
при развертывании необязательного значения ".
Я также пытался пометить UITextField, но когда я пытаюсь получить доступ к заголовку раздела, используя certainTableView.viewWithTag(_ tag:)
, и приведу полученный UIView к UITextField, в строке, где происходит приведение, возникает ошибка, говорящая «Не удалось приведите значение типа 'UITableView' к 'UITextField'. "
Обе ошибки выглядят довольно странно для меня. В первом случае я убедился, что заголовок раздела существует, но метод вернул nil
. Во втором случае возвращаемое теговое представление должно иметь тип UITableViewHeaderFooterView, но тип UITableView. Может кто-нибудь подсказать какую-либо возможную причину, почему это так и как исправить?
Или, в качестве альтернативы, есть ли лучший подход для доступа к представлению заголовка раздела, чтобы я мог сохранить текст, введенный в UITextField?
Ниже приведена деталь, которую я использовал в первом случае.
В func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
я вернул UIView, который содержит UITextField. В табличном представлении, в котором мне нужно сохранить введенные пользовательские данные, у меня есть кнопка, которая, когда пользователь нажимает на нее, сохраняет данные. В этом селекторе у меня есть следующее:
//save item
let a = addItemTableView.headerView(forSection: 0)!
let b = a.subviews[0] as! UITextField
let c = b.text ?? ""
someNSManagedObject.text = c
Ошибка, о которой я упоминал выше, появляется в первой строке.