Можете ли вы создать TableView в пользовательской ячейке?

У меня есть пользовательский TableViewCell. Внутри этого я хочу поставить еще TableView, но у меня проблемы. У меня есть что-то вроде этого:

import UIKit

class ByteCell: UITableViewCell, UITableViewDelegate, UITableViewDataSource {


    @IBOutlet weak var title: UILabel!
    @IBOutlet weak var game: UIImageView!
    @IBOutlet weak var TableView: UIView!


    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code

    }

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

        // Configure the view for the selected state
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell()
        return cell
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 5
    }

}

Во-первых, я не могу написать:

tableView.delegate = self
tableView.dataSource = self

где-нибудь здесь, поэтому я вообще не могу изменить tableView.

Во-вторых, TableView, который появляется, не имеет строк и не может быть прокручен. По сути, я хочу сделать прокручиваемый TableView внутри пользовательской ячейки, которая находится внутри TableView. Это возможно?

Спасибо!


person Evan    schedule 14.01.2020    source источник
comment
Вы не можете написать tableView.delegate = self; tableView.dataSource = self, потому что ваш tableView в этом классе установлен как обычный UIView. Но да, вы можете добавить UITableView в UITableViewCell.   -  person Zonily Jame    schedule 14.01.2020
comment
да, это была моя проблема, спасибо!   -  person Evan    schedule 15.01.2020


Ответы (1)


Вы абсолютно точно можете поместить UITableView внутрь UITableViewCells

Где разместить .delegate = self, зависит от того, как вы создали ячейку.

Если вы создали его программно, используйте override init

 override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        tableView = UITableView()
        tableView.delegate = self
        tableView.dataSource = self
    }

Однако, если вы загружаете ячейку из пера или раскадровки, используйте initWithCoder

-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
       tableView = UITableView()
       tableView.delegate = self
       tableView.dataSource = self
    }
    return self;
}

Просто заметка, вы настраиваете себя на ухабистую дорогу. Тем не менее, это вполне возможно, так что удачи!

person Eloy B.    schedule 14.01.2020
comment
Обновление: я не стал использовать ваш код, я понял, что у меня просто возникла проблема с моей раскадровкой, но я смог создать табличное представление с настраиваемыми ячейками, и каждая настраиваемая ячейка имеет табличное представление с другой настраиваемой ячейкой внутри, ха-ха - person Evan; 15.01.2020
comment
Потрясающе, да, наслаждайтесь той кроличьей норой, в которую вы собираетесь спуститься. ;) - person Eloy B.; 15.01.2020
comment
Ха-ха, спасибо, если вы хотите помочь мне спуститься в эту кроличью нору, я понимаю, что у меня все еще есть проблема: stackoverflow.com/questions/59743623/ - person Evan; 15.01.2020
comment
Я полностью понимаю, если вы хотите избежать кроличьей норы, ха-ха - person Evan; 15.01.2020