Невозможно выбрать ячейку таблицы - PullRequest
0 голосов
/ 06 ноября 2019

Я использую 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 голосов
/ 06 ноября 2019

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

Я просто добавил Bool, чтобы иметь возможность выбрать, использовать его или нет:

open var useTapGesture: Bool = true

, а затем обернул код жеста касания следующим образом:

if useTapGesture {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(BaseViewController.dismissKeyboard))
        view.addGestureRecognizer(tap)
    }

Таким образом, я могу использовать

useTapGesture = false

в моем методе viewDidLoad.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...