简体   繁体   English

访问自定义标题视图的组件

[英]Access components of custom header view

A custom header class is created for the header, view using xib.为头创建自定义头类,使用xib查看。 Trying to get the value of UITextField from that header class.试图从该头类中获取 UITextField 的值。 Below is the code:下面是代码:

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
}

When trying to get value from the textfields below:尝试从下面的文本字段中获取值时:

 @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()
}

It is giving error in this line它在这一行给出错误

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

Gives warning and crash when run运行时发出警告和崩溃

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

Please guide for the same.请指导相同。

You may try using the header object as a member.您可以尝试使用标头对象作为成员。

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
}

And then you can use the member object;然后就可以使用成员对象了;

@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()
}

I m not sure but the reason may optional value.我不确定,但原因可能是可选值。 Tableview only renders view on the screen, you may getting nil. Tableview 只在屏幕上呈现视图,您可能会得到 nil。 Signature of the function is;函数的签名是;

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

It returns an optional variable.它返回一个可选变量。 You trying to cast an optional variable.您尝试强制转换可选变量。 XCode may not work perfectly on casting optional variables, so it can't warn you with enough info. XCode 可能无法完美地转换可选变量,因此它无法提供足够的信息来警告您。

You may try;你可以试试;

tblAddedTasks.headerView(forSection: 0) as! AddHeaderTableViewCell

or或者

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

Probably will crash but at least you will see the real reason for crashing.可能会崩溃,但至少你会看到崩溃的真正原因。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM