我正在使用Xcode 11.2,并且有一个包含3个表视图的视图。它们都有代码的出口,它们的委托和数据源已在viewDidLoad方法中正确设置。
发生的事情是,单击该单元格会突出显示该单元格,但是它不会保持选中状态(didSelectRow永远不会被调用)。
如果用鼠标左右键快速单击多次,则最终将选中该单元格并调用didSelectRow。
我还注意到,如果单击单元格并同时稍微滚动表格,选择几乎总是可行的。
下面是一些代码:
@IBOutlet weak var linesTableView: UITableView!
@IBOutlet weak var firstLvlTableView: UITableView!
@IBOutlet weak var secondLvlTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.linesTableView.dataSource = self
self.linesTableView.delegate = self
self.firstLvlTableView.delegate = self
self.firstLvlTableView.dataSource = self
self.secondLvlTableView.dataSource = self
self.secondLvlTableView.delegate = self
if (CLLocationManager.locationServicesEnabled()) {
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.requestAlwaysAuthorization()
locationManager.startUpdatingLocation()
}
self.secondLvlTableView.isHidden = true
self.firstLvlTableView.isHidden = false
self.linesTableView.isHidden = true
fetchData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == linesTableView {
return 0
} else if tableView == firstLvlTableView {
return self.salesAssistantLocalized.count //viewModel.typesOfSale.lists.endIndex
} else if tableView == secondLvlTableView {
return 4 //viewModel.standardTableLevels.lists.endIndex
} else {
return 0
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView == firstLvlTableView {
let cell = tableView.dequeueReusableCell(withIdentifier: "FirstLvlCell", for: indexPath)
cell.textLabel?.text = self.salesAssistantLocalized[indexPath.row]
return cell
} else if tableView == secondLvlTableView {
let cell = tableView.dequeueReusableCell(withIdentifier: "SecondLvlCell", for: indexPath)
cell.textLabel?.text = self.levels[indexPath.row]
return cell
} else {
let cell = tableView.dequeueReusableCell(withIdentifier: "SaleTypeCell", for: indexPath)
return cell
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
printDebug("Did Select Row \(indexPath.row) for table \(tableView)")
if tableView == firstLvlTableView {
if indexPath.row == 0 {
self.secondLvlTableView.isHidden = false
}
}
}
答案 0 :(得分:0)
我已经知道发生了什么事。 所有视图控制器都从“ BaseViewController”扩展而来,该“ BaseViewController”具有用于关闭键盘的轻击手势识别器。 这就是问题所在。
我只是添加了一个布尔来选择是否使用它:
open var useTapGesture: Bool = true
,然后用以下代码包装点击手势代码:
if useTapGesture {
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(BaseViewController.dismissKeyboard))
view.addGestureRecognizer(tap)
}
这样我可以使用
useTapGesture = false
在我的viewDidLoad方法中。