У меня есть три класса ( SurePeople , MaybePeople , NopePeople ) в моем contentView .Все они являются подклассами одного и того же UITableView
PeopleTableView .Разница лишь в том, откуда они получают массив своих пользователей.Если users.count равен нулю, я изменяю константу heightAnchor этого tableView на ноль, чтобы скрыть его.
Когда я щелкаю по первой строке Tableview первого отображаемого Tableview, метод didSelectRowAt
вызывается, если я нажимаю на любую другую строку, ничего не происходит.Что происходит?
contentView:
for controller in tableViewControllers {
contentView.addSubview(controller)
controller.delegateTVToSingleEvent = delegateSVToSingleEvent?.getSingleEventVC()
controller.delegateTVToScrollView = self
let heightCon = controller.heightAnchor.constraint(equalToConstant: 0)
heightCon.isActive = true
heightCons.append(heightCon)
}
PeopleTableView:
class PeopleTableView: UIView, ReusableView {
//MARK: - Properties & Variables
var delegateTVToSingleEvent: tableViewToSingleEvent?
var delegateTVToScrollView: tableViewToScrollView?
var myEvent: Event
var users: [User]! = [User]()
//MARK: - GUI Objects
let peopleTableView: UITableView = {
let tableview = UITableView()
return tableview
}()
let peopleLabel: UILabel = {
let label = UILabel()
label.font = UIFont.systemFont(ofSize: 20)
label.text = "Label:"
label.textColor = .black
return label
}()
//MARK: - Init & View Loading
init(frame: CGRect, event: Event) {
self.myEvent = event
super.init(frame: frame)
self.backgroundColor = LebensfitSettings.Colors.basicBackColor
setupTableView()
setupViews()
}
//MARK: - Setup
func setupTableView() {
peopleTableView.delegate = self
peopleTableView.dataSource = self
peopleTableView.register(TeilnehmerTVCell.self, forCellReuseIdentifier: TeilnehmerTVCell.reuseIdentifier)
peopleTableView.tintColor = .white
peopleTableView.isScrollEnabled = false
peopleTableView.allowsSelection = true
}
func setupViews() {
addSubview(peopleLabel)
addSubview(peopleTableView)
}
func removeViews() {
peopleTableView.removeFromSuperview()
peopleLabel.removeFromSuperview()
}
func confBounds(){
peopleLabel.anchor(top: topAnchor, left: leftAnchor, bottom: nil, right: rightAnchor, paddingTop: 15, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 25)
peopleTableView.anchor(top: peopleLabel.bottomAnchor, left: leftAnchor, bottom: bottomAnchor, right: rightAnchor, paddingTop: 5, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 0)
}
//MARK: - Methods
func loadUsers() {
setNeedsUpdateConstraints()
if users.count == 0 {
removeViews()
padding = 0
} else {
setupViews()
padding = 15+25+5
}
self.updateConstraints()
delegateTVToScrollView?.finishedLoadingParticipants()
}
//MARK: - Do not change Methods
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension PeopleTableView: UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let row = tableView.dequeueReusableCell(withIdentifier: TeilnehmerTVCell.reuseIdentifier, for: indexPath) as! TeilnehmerTVCell
//TODO: don't just pass the user.. fill the rows elements from here
row.isUserInteractionEnabled = true
row.user = users[indexPath.row]
row.confBounds()
return row
}
}
//MARK: - TVDelegate
extension PeopleTableView: UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return users.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return height
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
guard let id = users[indexPath.row].uid else { return }
delegateTVToSingleEvent?.gotoProfile(clickedUID: id)
}
}