我有一个tableView,我设置了委托和数据源,但是当点击一个单元格时,didSelectRowAt函数没有被调用。 这是我的代码:
private let reuseIdentifier = "DropdownCell"
extension ReportVC: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return showMenu ? companies.count : .zero //If show menu is true the tableView needs to be shown, so we are returning the number of companies in the array, if the show menu is flase the tableView does NOT needs to be shown, so we are returning zero.
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath) as! CompanyCell
cell.companyNameLabel.text = companies[indexPath.row]
let bgColorView = UIView()
bgColorView.backgroundColor = UIColor.appBlueAccent
cell.selectedBackgroundView = bgColorView
return cell
}
//TODO: add arrow to indicate the dropdown list, adjust the select company label to the side of the screen
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let button = UIButton(type: .system)
button.setTitle("Select Company", for: .normal)
button.setTitleColor(UIColor.appWhite, for: .normal)
button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 14)
button.addTarget(self, action: #selector(handleDropDown), for: .touchUpInside)
button.backgroundColor = UIColor.appBlueAccent
return button
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print(indexPath.row)
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 50
}
func configureTableView(){
tableView = UITableView()
tableView.translatesAutoresizingMaskIntoConstraints = false
tableView.isScrollEnabled = false
tableView.rowHeight = 50
tableView.separatorStyle = .none
tableView.backgroundColor = UIColor.appWhite
tableView.delegate = self
tableView.dataSource = self
tableView.register(CompanyCell.self, forCellReuseIdentifier: reuseIdentifier)
view.addSubview(tableView)
NSLayoutConstraint.activate([
tableView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 0),
tableView.leftAnchor.constraint(equalTo: view.leftAnchor),
tableView.rightAnchor.constraint(equalTo: view.rightAnchor),
tableView.heightAnchor.constraint(equalToConstant: 250),
])
}
@objc func handleDropDown(){
showMenu = !showMenu
var indexPaths = [IndexPath]()
for i in 0..<companies.count{
let indexPath = IndexPath(row: i, section: 0)
indexPaths.append(indexPath)
}
if showMenu {
tableView.insertRows(at: indexPaths, with: .automatic)
}else{
tableView.deleteRows(at: indexPaths, with: .automatic)
}
}
}
这是我对ReportVC的扩展,在报告VC中,我调用configureTableView并设置showMenu和tableView变量。 我试图打印indexPath,或者实际上甚至只是打印一个字符串,以查看didSelectRowAt是否被调用,但是什么也没发生。
答案 0 :(得分:0)
我在想水龙头吞没了我单元的内容。我要做的是使用“调试视图层次结构”来查看布局。