无法选择表格视图的单元格

时间:2019-11-06 08:06:47

标签: ios swift xcode uitableview

我正在使用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
        }
    }
}

1 个答案:

答案 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方法中。