Пользовательские ячейки для расширяемого UiTableView - PullRequest
0 голосов
/ 25 сентября 2018

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

Для этого я разработал 2 файла пера.Один для разделов, а другой для ячейки в разделах.

Я прикрепил UitableView и делегированные методы.Я успешно показываю представление заголовка, я регистрирую представление заголовка следующим образом.

let nib = UINib.init(nibName: "headerItemSavedListCell", bundle: nil)
self.lvSavedList.register(nib, forCellReuseIdentifier: "headerItemSavedListCell")

и для ячейки я делаю следующим способом

if(indexPath.row == 0){
    let header = Bundle.main.loadNibNamed("headerItemSavedListCell", owner: self, options: nil)?.first as! headerItemSavedListCell

    return header

}else{

    let cell = Bundle.main.loadNibNamed("ItemSavedListCell", owner: self, options: nil)?.first as! ItemSavedListCell

    return cell
}

Но это не работает,

** Итак, мои вопросы: **

  • Как загрузить внутренний вид ячейки?
  • Как расширить вид ячеек свертывания, который находится внутри Разделов?

Пожалуйста, помогите, если у вас есть учебник, касающийся расширяемого Uitableview

1 Ответ

0 голосов
/ 25 сентября 2018

класс, который я здесь использую, подключен к xibs

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

protocol HeaderDelegate:class{
func didSelectHeader(Header:HeaderFooter,at index:Int)
}

class HeaderFooter: UITableViewHeaderFooterView {
@IBOutlet weak var lblTitle: UILabel!

weak var delegate:HeaderDelegate?
var Expand = false

override func awakeFromNib() {
    let tap = UITapGestureRecognizer.init(target: self, action: #selector(didSelect(_:)))
    self.addGestureRecognizer(tap)
    self.isUserInteractionEnabled = true
}

@objc func didSelect(_ tap:UITapGestureRecognizer)
{
    delegate?.didSelectHeader(Header: self, at: self.tag)
}

override func prepareForReuse() {
    Expand = false
}
}

выше, я добавил жест касаниячтобы обнаружить прикосновение к headerViews

, затем создайте ячейку, как показано ниже

class ExpandableCell: UITableViewCell {

var isExpanded = false
override func awakeFromNib() {
    super.awakeFromNib()
    isExpanded = false
    // Initialization code
}

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

}

в вашем контроллере представления

tblView.register(UINib.init(nibName: "HeaderFooter", bundle: nil), forHeaderFooterViewReuseIdentifier: "HeaderFooter")

в tablview dataSorce и Delegate Method

func numberOfSections(in tableView: UITableView) -> Int {
    return numberofsections
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return numberofrows
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "ExpandableCell") as? ExpandableCell else {
        return UITableViewCell()
    }
    //configure cell here
    return cell
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    guard let header = tableView.headerView(forSection: indexPath.section) as? HeaderFooter
        else {return 0}
    if header.Expand
    {
        return UITableViewAutomaticDimension
    }
    else
    {
        return 0
    }
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {
     return 50
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

}

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    guard let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "HeaderFooter") as? HeaderFooter else {return nil}
    //configure header View here
    headerView.tag = section
    return headerView
}
//MARK:-headerDelegate
func didSelectHeader(Header: HeaderFooter, at index: Int) {
    Header.Expand = !Header.Expand
    //comment below part if you dont want to collapse other rows when other section opened
    for i in 0..<tblView.numberOfSections
    {
        if i != index
        {
            guard let header = tblView.headerView(forSection: i) as? HeaderFooter else {return}
            header.Expand = false
            for j in 0..<tblView.numberOfRows(inSection: i)
            {
                tblView.reloadRows(at: [IndexPath.init(row: j, section: i)], with: .automatic)
            }
        }
        else
        {
            for j in 0..<tblView.numberOfRows(inSection: i)
            {
                tblView.reloadRows(at: [IndexPath.init(row: j, section: i)], with: .automatic)
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...